2010-05-27 25 views

Trả lời

41

Hãy xem NSAlert, trong đó có một -runModal phương pháp đồng bộ:

NSAlert *alert = [[[NSAlert alloc] init] autorelease]; 
[alert setMessageText:@"Hi there."]; 
[alert runModal]; 

Như Peter nhắc đến, một sự thay thế tốt hơn là sử dụng các cảnh báo as a modal sheet trên cửa sổ, ví dụ:

[alert beginSheetModalForWindow:window 
       modalDelegate:self 
      didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) 
       contextInfo:nil]; 

Bạn có thể thêm các nút qua -addButtonWithTitle::

[a addButtonWithTitle:@"First"]; 
[a addButtonWithTitle:@"Second"]; 

Mã trả lại cho bạn nút được nhấn:

- (void) alertDidEnd:(NSAlert *)a returnCode:(NSInteger)rc contextInfo:(void *)ci { 
    switch(rc) { 
     case NSAlertFirstButtonReturn: 
      // "First" pressed 
      break; 
     case NSAlertSecondButtonReturn: 
      // "Second" pressed 
      break; 
     // ... 
    } 
} 
+3

Thậm chí tốt hơn, bắt đầu cảnh báo như một tờ trên cửa sổ có chứa nút delete . Bằng cách này, người dùng có thể tiếp tục sử dụng bất kỳ cửa sổ nào khác trong ứng dụng của bạn. –

+0

Wow làm việc tốt của nó.Nhưng làm thế nào để đặt nhiều nút hơn trong cảnh báo này và làm thế nào để có được rằng các sự kiện nút – mikede

+1

@ mik: Bằng cách sử dụng ['-addButtonWithTitle:'] (http://developer.apple.com/mac/library/ tài liệu/ca cao/khái niệm/Dialog/Task/UsingAlerts.html). Ngoài ra còn có [thông báo đặc biệt] (http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Dialog/Tasks/UsingAlerts.html) trong tài liệu sẽ giúp bạn. –

6

thời gian dài đã trôi qua kể từ câu trả lời chấp nhận và mọi thứ đã thay đổi:

  • Swift ngày càng trở nên phổ biến hơn.
  • beginSheetModalForWindow(_:modalDelegate:didEndSelector:contextInfo:) không được dùng nữa, chúng tôi nên sử dụng beginSheetModalForWindow:completionHandler: thay thế.

mẫu mã mới nhất trong Swift:

func messageBox() { 
    let alert = NSAlert() 
    alert.messageText = "Do you want to save the changes you made in the document?" 
    alert.informativeText = "Your changes will be lost if you don't save them." 
    alert.addButtonWithTitle("Save") 
    alert.addButtonWithTitle("Cancel") 
    alert.addButtonWithTitle("Don't Save") 
    alert.beginSheetModalForWindow(window, completionHandler: savingHandler) 
} 

func savingHandler(response: NSModalResponse) { 
    switch(response) { 
    case NSAlertFirstButtonReturn: 
     println("Save") 
    case NSAlertSecondButtonReturn: 
     println("Cancel") 
    case NSAlertThirdButtonReturn: 
     println("Don't Save") 
    default: 
     break 
    } 
} 

Trong trường hợp bạn muốn có một phiên bản đồng bộ:

func messageBox() { 
    let alert = NSAlert() 
    alert.messageText = "Do you want to save the changes you made in the document?" 
    alert.informativeText = "Your changes will be lost if you don't save them." 
    alert.addButtonWithTitle("Save") 
    alert.addButtonWithTitle("Cancel") 
    alert.addButtonWithTitle("Don't Save") 
    let result = alert.runModal() 
    switch(result) { 
    case NSAlertFirstButtonReturn: 
     println("Save") 
    case NSAlertSecondButtonReturn: 
     println("Cancel") 
    case NSAlertThirdButtonReturn: 
     println("Don't Save") 
    default: 
     break 
    } 
} 
+0

Bạn đã lưu ngày của tôi! – cmcromance

Các vấn đề liên quan