UIAlertView/UIAlertController iOS 7 and iOS 8 compatibility

后端 未结 14 1495
暗喜
暗喜 2020-11-28 22:31

I am using Swift to write an app and I need to show an alert. The app must be iOS 7 and iOS 8 compatible. Since UIAlertView has been replaced with UIAlert

14条回答
  •  無奈伤痛
    2020-11-28 22:56

    If your using both iOS 7- UIAlertView and iOS 8+ UIAlertController as described above, and you want your UIAlertController blocks to call your UIAlertView's delegate (e.g. MyController) alertView:didDismissWithButtonIndex method to continue processing the results, here is an example of how to do that:

    if ([UIAlertController class]) {
        MyController * __weak mySelf = self;
    
        UIAlertController *alertController = [UIAlertController
            alertControllerWithTitle:alertTitle
            message:alertMessage
            preferredStyle:UIAlertControllerStyleAlert];
    
        UIAlertAction *cancelAction = [UIAlertAction
            actionWithTitle:alertCancel
            style:UIAlertActionStyleCancel
            handler:^(UIAlertAction *action)
                {
                [mySelf alertView:nil didDismissWithButtonIndex:0];
                }
        ];
    
    ...
    

    This uses Apple's recommendation for capturing self in a block: Avoid Strong Reference Cycles when Capturing self

    Of course, this method assumes you only have one UIAlertView in the controller and therefore pass nil as its value to the delegate method. Otherwise, you'd need to instantiate (and tag) a "fake" UIAlertView to pass to alertView:didDismissWithButtonIndex.

提交回复
热议问题