2015-01-01 55 views
1

我試圖從我創建的類中顯示AlertController。 由於AlertController是我使用UIResponder的子類下面的代碼行的Xcode是在暗示我從自定義類中顯示alertController

superclass?.presentViewController(alertController, animated: true, completion: nil) 

但我不能編譯,因爲AnyClass?沒有任何成員presentViewController。 我的課是NSObject的一個子類。

任何其他解決方案? 謝謝

+0

'presentViewController'是UIViewController'的'的方法,而不是'NSObject' – Krumelur

+0

@Krumelur我知道,但我想從我的班級顯示一個UIAlertController。有沒有其他解決方法? – Nicholas

回答

1

問題是你對「從」的理解。警報出現在界面的某個視圖前面。因此,我們需要知道什麼查看。答案是:某個視圖控制器的主視圖 - 主視圖位於界面中的視圖控制器。

因此,只有主視圖在界面中的視圖控制器才能被告知呈現警報。這是您必須提供「視圖」的視圖控制器。

您需要有某種方式從代碼的任何位置獲取對該視圖控制器的引用,以便您的代碼可以告訴該視圖控制器顯示該警報。這本身可能是一個有趣的問題;的確,「獲得對現有對象的引用」是可可編程藝術的主要部分。

+0

這是一個非常重要的問題(「獲取參考資料」),我將本書的一部分內容放在它的下面:http://www.apeth.com/iOSBook/ch13.html#_instance_visibility它可能會給你一些想法。 – matt

+0

天才!只需在init方法中包含UIViewController即可。完成。 – Nicholas

1

從烏爾視圖控制器u有通過控制器的參考,消息標題諸如

Settings.getAlertViewConroller(self, DialogTitle: "Test Sale", strDialogMessege: "You are performing a test sale. This is not a real transaction.") 

其中設置是NSObject.In設置類的子類u必須定義方法

class func getAlertViewConroller(globleAlert:UIViewController,DialogTitle:NSString,strDialogMessege:NSString){ 


    let actionSheetController: UIAlertController = UIAlertController(title: DialogTitle, message: strDialogMessege, preferredStyle: .Alert) 


    let nextAction: UIAlertAction = UIAlertAction(title: "OK", style: .Default) { action -> Void in 

    } 
    actionSheetController.addAction(nextAction) 

    globleAlert.presentViewController(actionSheetController, animated: true, completion:nil) 

} 

即呈現UIAlertController。

5

那麼你只需要找到最頂層的視圖控制器,並從那裏出示alertcontroller

UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 

while (topController.presentedViewController) { 
    topController = topController.presentedViewController; 
} 
[topController presentViewController:alertController animated:YES completion:nil]; 

credits

注:這是代碼的Objective-C的版本。請將其轉換爲相應的快捷方式。

SWIFT

let topController = UIApplication.sharedApplication().keyWindow!.rootViewController as UIViewController 

while (topController.presentedViewController) { 
    topController = topController.presentedViewController; 
} 
topController.presentViewController(alertController, animated:true, completion:nil) 
+0

對不起,但我問swift,我不知道如何處理對象C.請考慮修改使用swift語言 – Nicholas

+0

編輯!好心檢查 –

0

最新斯威夫特:

var topController:UIViewController = UIApplication.shared.keyWindow!.rootViewController! 
    while ((topController.presentedViewController) != nil) { 
     topController = topController.presentedViewController!; 
    } 
    topController.present(alertController, animated:true, completion:nil) 
相關問題