2015-11-13 4 views
0

Я новичок в Swift 2. Я попытался создать UIAlertController в другом файле.ViewController в другом файле

Это мой код:

class my_view_error: UIViewController { 

func my_error(my_title: String, my_message: String) { 
    let alertController = UIAlertController(title: my_title, message: my_message, preferredStyle: .Alert) 
    let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in } 
    alertController.addAction(OKAction) 
    self.presentViewController(alertController, animated: true) {} 
    } 
} 

Я получаю ошибку во время компиляции:

Warning: Attempt to present on whose view is not in the window hierarchy!

Мой вопрос, можно ли создать ViewController в файле, кроме ViewController.swift?

ответ

0

Вы создали подкласс UIViewController под названием my_view_error. Метод UIViewControllerpresentViewController ожидает, что на момент вызова метода будет отображаться self (a my_view_error).

Ваша функция my_error прекрасна, но ее следует перенести в контроллер просмотра, который фактически находится на экране. Нет необходимости создавать UIViewController только для того, чтобы представить UIAlertController. Фактически, UIAlertControllerявляется a UIViewController и не нуждается в помощи от пользовательского контроллера.

Как и любой контроллер вида, контроллер представления, представляющий предупреждение, должен быть на экране, чтобы выполнить презентацию.

Каждый контроллер вида может иметь свой собственный файл .swift. Однако нет необходимости создавать его для UIAlertController.

Heres версия функции, которая использует rootViewController на UIApplication, чтобы получить вид контроллер в данный момент на экране, а затем использует это представить ваше предупреждение:

func my_error(my_title: String, my_message: String) { 
    let alertController = UIAlertController(title: my_title, message: my_message, preferredStyle: .Alert) 
    let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in } 
    alertController.addAction(OKAction) 

    // Uses UIApplication.sharedApplication().keyWindow!.rootViewController! instead of self 
    UIApplication.sharedApplication().keyWindow!.rootViewController!.presentViewController(alertController, animated: true) {} 
} 
+0

Ok, спасибо за вашу информацию, поэтому я переместил мою функцию «my_error» на мой view_controller, это работает, но если я хочу вызвать эту функцию в другом файле, функция не распознается «использование неразрешенного идентификатора« my_error », мне нужно создать второй ViewController? – Guillaume

+0

@Guillaume Нет, если вы пытаетесь вызвать 'my_error' из другого класса, тогда вам нужно будет получить экземпляр вашего контроллера представления, чтобы вызвать метод. –

+0

Я добавляю ed версия вашего метода, которая будет использовать текущий контроллер экрана. –

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