Показване на AlertView от UIView?

В Swift UIAlertView е отхвърлен и заменен с UIAlertController. Както виждам, единственият начин да покажете UIAlertController е чрез UIViewController, но понякога искате да го покажете от да кажем UIView.

Възможно ли е това сега с IOS8 и Swift?


person Arbitur    schedule 30.08.2014    source източник
comment
Нормалният начин да се справите с това е да използвате делегат. Изскачането на предупреждение за вашия изглед изглежда като нарушение на MVC.   -  person sapi    schedule 30.08.2014
comment
Видяхте ли това: stackoverflow.com/questions/24584364/   -  person ricardopereira    schedule 30.08.2014
comment
stackoverflow.com/questions/25505045/   -  person Jageen    schedule 05.09.2014


Отговори (1)


UIAlertView все още е наличен в Swift, той е остарял само в iOS 7. Ако искате да използвате най-новия API за iOS 8, бих препоръчал да направите нещо като по-долу. Въпреки че за простота, ако сте насочени към iOS 7 и iOS 8, бих препоръчал да използвате само стандартния UIAlertView и да не прилагате UIAlertController.

import UIKit

class ViewController: UIViewController, UIAlertViewDelegate {

let iosVersion = NSString(string: UIDevice.currentDevice().systemVersion).doubleValue

// MARK: - IBActions

@IBAction func showAlertTapped(sender: AnyObject) {
    showAlert()
}

// MARK: - Internal

func showAlert() {

    if iosVersion >= 8 {
        var alert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)

        // The order in which we add the buttons matters.
        // Add the Cancel button first to match the iOS 7 default style,
        // where the cancel button is at index 0.
        alert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction!) in
            self.handelCancel()
        }))

        alert.addAction(UIAlertAction(title: "Confirm", style: .Default, handler: { (action: UIAlertAction!) in
            self.handelConfirm()
        }))

        presentViewController(alert, animated: true, completion: nil)
    } else {
        var alert = UIAlertView(title: "Title", message: "Message", delegate: self, cancelButtonTitle: "Cancel", otherButtonTitles: "Confrim")

        alert.show()
    }

}

func handelConfirm() {
    println("Confirm tapped")

    // Your code
}

func handelCancel() {
    println("Cancel tapped")

    // Your code
}

// MARK: - UIAlertViewDelegate

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
    if buttonIndex == 0 {
        handelCancel()
    } else {
        handelConfirm()
    }
}

}

person Ross Gibson    schedule 15.10.2014