Общий протокол для UIViewcontroller и UITableviewcontroller Swift - PullRequest
0 голосов
/ 10 апреля 2019

Я писал несколько распространенных методов для отображения загрузчика предупреждений, подобных вещам,

Я хотел, чтобы к этим методам обращались из подклассов uiviewcontroller и uitableviewcontroller,

Как мы можем достичь того же самого?

Ответы [ 4 ]

2 голосов
/ 10 апреля 2019

Создайте UIViewController расширение и добавьте метод оповещения, как показано ниже.

extension UIViewController {

    func showAlert(title: String, message: String, buttonName: String, alertActionHandler: ((UIAlertAction) -> Void)? = nil) {

        guard let alertActionHandler = alertActionHandler else {
            return
        }

        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let actionButton = UIAlertAction(title: buttonName, style: .default, handler: { action in
            alertController.dismiss(animated: true, completion: nil)
            alertActionHandler(action)
        })
        alertController.addAction(actionButton)
        self.present(alertController, animated: true, completion: nil)
    }
}

И вы можете вызывать метод showAlert в любом месте ваших контроллеров представления.

2 голосов
/ 10 апреля 2019

UITableViewController является подклассом UIViewController, вы можете создать расширение UIViewController, и к объявленным там функциям могут обращаться экземпляры обоих типов:

extension UIViewController {
    func showAlert(title: String, message: String) {
        ...
    }
}
1 голос
/ 10 апреля 2019

Вы можете написать глобальный метод следующим образом:

func showAlert(_ view: UIView, title: String, message: String) {
    DispatchQueue.main.async {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
            switch action.style{
                case .default:
                    print("default")

                case .cancel:
                    print("cancel")

                case .destructive:
                    print("destructive")

            }}))

        view.present(alert, animated: true, completion: nil)
    }
}

И использовать его в каждом ViewController:

 showAlert(self.view, title: Alert, message: "Hi")
1 голос
/ 10 апреля 2019

Создайте общий файл типа NSObject, как показано в следующем коде.и затем вы можете позвонить из UIViewController или UITableviewController или из любого файла / контроллера.

import UIKit

class AppUtils: NSObject {

    static func showAlert(title: String, message: String) {
        DispatchQueue.main.async {
            let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
            let ok = UIAlertAction(title: "Ok", style: .default, handler: nil)
            alert.addAction(ok)
            UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
        }
    }
}

Вызвать функцию showAlert: -

AppUtils.showAlert(title: "My Title", message: "My Message")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...