首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

macOS Cocoa 彈框:NSAlert 與 CFUserNotification 兩種實現

     編輯:關於C++

方法一:NSAlert(推薦,Objective-C 原生)

NSAlert *alert = [[NSAlert alloc] init];
// [alert addButtonWithTitle:@"OK"];
// [alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Test?"];
// [alert setInformativeText:@"Deleted records cannot be restored."];
// [alert setAlertStyle:NSWarningAlertStyle];
// [alert setHelpAnchor:@"ddd"];
// [alert beginSheetModalForWindow:_window
//      modalDelegate:self
// didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
//    contextInfo:nil];
[alert runModal];

常用樣式:NSInformationalAlertStyle、NSWarningAlertStyle、NSCriticalAlertStyle。

模態類型:runModal(應用級模態)、beginSheetModalForWindow:(窗口級工作表模態)。

方法二:CFUserNotification(Core Foundation,C API)

CFOptionFlags result;
NSString *strMsg = [NSString stringWithFormat:@"%i", 234];
CFStringRef msgRef = (__bridge CFStringRef)strMsg;
CFUserNotificationDisplayAlert(
    0,                              // timeout
    kCFUserNotificationNoDefaultButtonFlag,
    NULL, NULL, NULL,               // icon, sound, localization
    CFSTR("Title"),                 // 標題
    CFSTR("Message"),               // 內容
    NULL, NULL, NULL,               // 按鈕標題(NULL 使用默認)
    &result);                       // 返回用戶點擊按鈕索引

適用場景:純 C/C++ 代碼中無 Objective-C 運行時、或需極簡單彈框無依賴 AppKit。

對比總結

Swift 版 NSAlert

let alert = NSAlert()
alert.messageText = "Test?"
alert.informativeText = "Details..."
alert.alertStyle = .warning
alert.addButton(withTitle: "OK")
alert.addButton(withTitle: "Cancel")
let response = alert.runModal()
if response == .alertFirstButtonReturn { /* OK */ }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性NSAlertCFUserNotification
語言Objective-C/SwiftC (Core Foundation)
自定義程度高(按鈕、圖標、輔助文字、樣式、工作表)低(基本標題/內容/按鈕)
非阻塞支援 Sheet 模態僅阻塞模態
推薦度★★★★★★★☆☆☆