• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::

            在創建Cocoa應用程序的時候,有時候我們需要在應用程序退出前讓用戶確認是否真正退出。這個可以用多種方法來實現。但是如果利用AlertSheet的話可以盡量使得過程更舒服。如下圖。

            我們可以利用xcode里面已經為你創建好的Application的代理類來調用NSBeginAlertSheer來做做代理處理請求。接下來我們來看看具體的做法。

            在Interface Builder里面從Application按下Control拉一條線到已經有的代理類上面,連接delegate的outlet。如下圖:

            然后轉向代理類的代碼中加入如下代碼:

            - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
            {
            NSString *msg = @"Should this applicaion quit?";
            SEL sel = @selector(sheetClosed:returnCode:contextInfo:);
             
            NSBeginAlertSheet(@"Close",
            @"OK",
            @"Cancel",
            nil,
            window,
            self,
            sel,
            NULL,
            sender,
            msg,
            nil);
            return NSTerminateLater;
            }
             
            - (void)sheetClosed:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
            {
            if (returnCode == NSAlertDefaultReturn)
            {
            [(NSApplication *)contextInfo replyToApplicationShouldTerminate:YES];
            }
            else
            {
            [(NSApplication *)contextInfo replyToApplicationShouldTerminate:NO];
            }
            }

            其中:

            - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;

            是Application類得到是否退出消息的控制函數。其返回值為:NSTerminateNowNSTerminateCancelNSTerminateLater。前兩個顧名思義,就是立刻退出和取消推出。最后一個則被用來使用回調/選擇函數處理后再用replyToApplicationShouldTerminate來決定程序是否退出。

            下面就是如何用NSBeginAlertSheet來接受用戶選擇以決定程序是否退出。其函數原型定義如下:

            void NSBeginCriticalAlertSheet (
            NSString *title, //標題
            NSString *defaultButton, //默認按鈕
            NSString *alternateButton, //第二按鈕
            NSString *otherButton, //其他按鈕
            NSWindow *docWindow, //用于attach該sheet的窗體
            id modalDelegate, //modal代理
            SEL didEndSelector, //Selector結束時(sheet消失前)調用的modalDelegate中的函數
            SEL didDismissSelector, //Selector結束時(sheet消失前)調用的modalDelegate中的函數
            void *contextInfo, //傳給didEnd和didDismiss的額外數據
            NSString *msg, //sheet的提示內容
            ...
            );

            我們把當前的類作為modalDelegate。然后用其中的sheetClosed函數來作為didEnd的回調函數。最后在applicationShouldTerminate最后返回NSTerminateLater來等待做進一步的處理。

            在我們的實際判斷過程中。通過判斷用戶按下的是否是NSAlertDefaultReturn來判斷用戶選擇的按鈕。如果是默認的退出按鈕,則給replyToApplicationShouldTerminate傳YES以立刻退出,否則傳NO取消退出。


            From: http://yeeyaa.me/articles/2011/03/confirm-application-quit-using-nsbeginalertsheet-as-delegate/
            @import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
            posted on 2011-12-09 03:05 逛奔的蝸牛 閱讀(834) 評論(0)  編輯 收藏 引用 所屬分類: Cocoa
            99精品国产免费久久久久久下载| 性做久久久久久久久久久| 亚洲精品白浆高清久久久久久 | 久久久久亚洲AV成人网人人网站| 久久高潮一级毛片免费| 久久AV高潮AV无码AV| 亚洲综合久久综合激情久久| 久久久噜噜噜久久中文字幕色伊伊| 国产成人精品久久免费动漫| 一级a性色生活片久久无少妇一级婬片免费放 | 久久久久成人精品无码中文字幕 | 久久强奷乱码老熟女| 99精品久久精品一区二区| 亚洲国产成人久久综合碰| 色欲久久久天天天综合网精品 | 欧美亚洲另类久久综合婷婷| 久久国产免费观看精品3| 一极黄色视频久久网站| 久久免费小视频| 91精品国产色综合久久| 久久久精品国产免大香伊| 欧美麻豆久久久久久中文| 国产精品狼人久久久久影院| 久久成人国产精品免费软件| 亚洲午夜福利精品久久| 色播久久人人爽人人爽人人片aV| 国产精品99久久久久久www| 国内精品伊人久久久久| 精品久久久久久中文字幕人妻最新| 久久婷婷五月综合成人D啪| 中文字幕无码久久人妻| 天天做夜夜做久久做狠狠| 久久久久香蕉视频| 久久中文精品无码中文字幕| 天堂无码久久综合东京热| 午夜精品久久久久久| 久久精品人人做人人爽电影| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 久久国产高清字幕中文| 久久亚洲欧美日本精品| 国产香蕉97碰碰久久人人|