How to create and get return Value from Cocoa Dialog?

前端 未结 4 1100
抹茶落季
抹茶落季 2020-12-13 15:46

In my application, I want to create a dialog box with one text field, and a button, through which I can prompt user and get back user entered value.

How do I do this

相关标签:
4条回答
  • 2020-12-13 16:29

    You can call an NSAlert and put the NSTextField as it's accessoryView like this"

    - (NSString *)input: (NSString *)prompt defaultValue: (NSString *)defaultValue {
        NSAlert *alert = [NSAlert alertWithMessageText: prompt
                                         defaultButton:@"OK"
                                       alternateButton:@"Cancel"
                                           otherButton:nil
                             informativeTextWithFormat:@""];
    
        NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)];
        [input setStringValue:defaultValue];
        [input autorelease];
        [alert setAccessoryView:input];
        NSInteger button = [alert runModal];
        if (button == NSAlertDefaultReturn) {
            [input validateEditing];
            return [input stringValue];
        } else if (button == NSAlertAlternateReturn) {
            return nil;
        } else {
            NSAssert1(NO, @"Invalid input dialog button %d", button);
            return nil;
        }
    }
    
    0 讨论(0)
  • 2020-12-13 16:29

    I believe what you are looking for is a sheet. Have a look at the Sheet Programming Topics documentation

    I've just updated a Github Sample project on this. You can enter text in a field on the sheet and pass that back to the main window.

    This example shows how to create a view in a nib and use a custom sheet controller class which uses a block as the callback, rather than having to create and pass in a selector.

    0 讨论(0)
  • 2020-12-13 16:46

    IN OS X 10.10:

        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:@"Permission denied, sudo password?"];
        [alert addButtonWithTitle:@"Ok"];
        [alert addButtonWithTitle:@"Cancel"];
    
        NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)];
        [input setStringValue:@""];
    
        [alert setAccessoryView:input];
        NSInteger button = [alert runModal];
        if (button == NSAlertFirstButtonReturn) {
            password = [input stringValue];
        } else if (button == NSAlertSecondButtonReturn) {
    
        }
    
    0 讨论(0)
  • 2020-12-13 16:47

    An example in Swift as of Xcode 7.2.1 and OS X 10.11:

    let a = NSAlert()
    a.messageText = "Please enter a value"
    a.addButtonWithTitle("Save")
    a.addButtonWithTitle("Cancel")
    
    let inputTextField = NSTextField(frame: NSRect(x: 0, y: 0, width: 300, height: 24))
    inputTextField.placeholderString = "Enter string"
    a.accessoryView = inputTextField
    
    a.beginSheetModalForWindow(self.window!, completionHandler: { (modalResponse) -> Void in
        if modalResponse == NSAlertFirstButtonReturn {
            let enteredString = inputTextField.stringValue
            print("Entered string = \"\(enteredString)\"")
        }
    })
    
    0 讨论(0)
提交回复
热议问题