2015-12-25 2 views
0

Это название, вероятно, не подходит, поскольку я понятия не имею, как его называть.Вызов функции в другом UIViewController

class OneViewController: UIViewController 
{ 

    @IBAction func someFunc(sender: AnyObject) 
    { 
     displayAlertMessage(someString) 
    } 


    func displayAlertMessage(alertMessage: String) 
    { 
     let alert = UIAlertController(title, message, preferredStyle); 
     let dismissAction = UIAlertAction(title, style, handler); 

     alert.addAction(dismissAction); 
     self.presentViewController(alert, animated, completion); 
    } 
    } 
} 

Так выше структура будет работать, но с тем, как я делаю вещи, displayAlertMessage будет излишним в других представлениях. Поэтому я хочу переместить его в свой класс.

class OneViewController: UIViewController 
{ 

    @IBAction func someFunc(sender: AnyObject) 
    { 
     AlertMessageViewController().displayAlertMessage(someString) 
    } 
} 


class AlertMessageViewController: UIViewController { 

    func displayAlertMessage(alertMessage: String) 
    { 
     let alert = UIAlertController(title, message, preferredStyle); 
     let dismissAction = UIAlertAction(title, style, handler); 

     alert.addAction(dismissAction); 
     self.presentViewController(alert, animated, completion); 
    } 

} 

Но, конечно, я получаю сообщение об ошибке говорящее

Предупреждение: Попытка представить на , чье мнение не в окне иерархии!

Итак, из моего понимания, я предполагаю, что произошла ошибка, поскольку AlertMessageViewController не привязан ни к чему? Поэтому я считаю, что могу создать еще один UIViewController, а затем связать их. Но затем каждый раз, когда я хочу отображать предупреждающее сообщение, он переключит представления вместо всего лишь небольшого окна. Как мне это сделать?

ответ

2
class AlertMessageViewController { 

    static func displayAlertMessage(alertMessage: String,viewController:UIViewController) { 

     let alert = UIAlertController(title, message, preferredStyle); 
     let dismissAction = UIAlertAction(title, style, handler); 

     alert.addAction(dismissAction); 
     viewController.presentViewController(alert, animated, completion); 

    } 

} 

и вы можете назвать это таким образом:

AlertMessageViewController.displayAlertMessage("message",viewController:yourControllerInstance) 
+0

Итак, подождите, какой класс AlertMessageViewController сейчас? Почему AlertViewMessageController.displayAlertMessage работает без скобок? Как и в AlertViewMessageController(). DisplayAlertMessage. Из-за этого сейчас статично? – fossdeep

+0

Я просто пытаюсь следовать вашему подходу, чтобы изолировать код, представляющий сообщение, в UIAlertController. Я добавляю статику в функцию, поэтому вам не нужно создавать экземпляр AlertMessageViewController. Я бы назвал класс AlertMessageViewControllerUtils вместо AlertMessageViewController. Это просто класс, расширяющий все. –

+0

Это просто класс, расширяющий ничего ... –

0

Вы также можете расширить UIViewController класса

extension UIViewController 
{ 
    func displayAlertMessage(alertMessage: String) { 

     let alert = UIAlertController("YOUR_TITLE", alertMessage, YOUR_STYLE); 
     let dismissAction = UIAlertAction("YOUR_TITLE", YIUR_STYLE, YOUR_HANDLER); 

     alert.addAction(dismissAction); 
     self.presentViewController(alert, true, YOUR_COMPLETION:BLOCK); 
    } 
} 

И тогда вы можете вызвать myController.displayAlertMessage("This is my alert")

Очевидно, что расширение не может содержать сохраненные свойства, поэтому вам необходимо передать все параметры, которые вам нужны

Смежные вопросы