2016-07-26 2 views
2

У меня есть viewController1 и viewController2, который представлен модально, и я хочу использовать обработчик завершения, когда я увольняю второй, но я не могу получить реализацию. Я думал, что я должен написать функцию и просто поставить его там, как:Как правильно отменить modal viewcontroller с обработчиком завершения

viewController.dismissViewControllerAnimated(true, completion: funcToCall()) 

, но затем я получаю эту ошибку:

Cannot convert value of type '()' to expected argument type '(() -> Void)?'

Любой человек может объяснить мне, как я могу выполнить правильно обработчик завершения , пожалуйста?

ответ

8

Довольно легко, проходит funcToCall() как completion параметра (важное замечание - я использую фигурные скобки здесь):

viewController.dismissViewControllerAnimated(true, completion: { 
    funcToCall() 
}) 

Документация completion параметра:

The block to execute after the view controller is dismissed. This block has no return value and takes no parameters. You may specify nil for this parameter.

+0

тогда проблема была я была не использовать фигурные скобки? однако он работает, но это кажется только частично. когда я пытаюсь представить новый viewController, я все равно получаю эту ошибку: попытайтесь представить viewController3, чей вид не находится в иерархии окон! но потом как-то он ее представляет. это заводит меня орехами – i6x86

+0

Я постараюсь объяснить это лучше. Я увольняю vc2 с завершением: уведомление и наблюдатель в vc1, который запускает segueWithIdentifier, когда vc2 предположительно отклоняется, но затем я получаю «попытку представить viewController3, чей вид не находится в иерархии окон». ошибка. теперь я все еще получаю его, но затем выполняется segue, и я не уверен, что это может привести к будущим проблемам. – i6x86

+0

О, это еще одна ошибка. Пожалуйста, проверьте эту тему - http://stackoverflow.com/questions/26022756/warning-attempt-to-present-on-whose-view-is-not-in-the-window-hierarchy-s –

3

Просто удалите скобки и передайте имя функции в качестве параметра следующим образом:

viewController.dismissViewControllerAnimated(true, completion: funcToCall) 

Это работает до тех пор, как ваша функция funcToCall имеет type()->Void как

func funcToCall() { 
    // do something 
} 
Смежные вопросы