2015-04-09 1 views
0

Я создал segue (представленный модально) из контроллера A вида, чтобы просмотреть контроллер B, который запускается с помощью кнопки в контроллере навигации контроллера вида A. Используемый модал используется для отправки запроса друга, введя Эл. адрес. Когда пользователь вводит адрес электронной почты и нажимает кнопку для отправки запроса друга, я хочу выполнить действие, инициируемое кнопкой (вызов сервера для отправки запроса друга и возврата успеха, если письмо существует или возвращает ошибку, если адрес электронной почты не работает не существует). Если успех, я хочу выйти/отключить segue обратно на A. Если ошибка, я не хочу выходить/разматывать segue.Как выполнить действие перед тем, как запустить exit segue?

Я рассмотрел вопрос this, но, похоже, он не реализует то, что мне нужно. Я пытаюсь следующее:

class BViewController: UIViewController { 
    // The button function 
    @IBAction func sendFriendRequest(sender: AnyObject) { 
     println("Button Function.") 
     self.performSegueWithIdentifier("SendFriendRequest", sender: self) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "SendFriendRequest" { 
      println("Preparing for segue.") 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

, а затем в первом контроллере представления:

AViewController: UIViewController { 
    // The unwind function 
    @IBAction func saveFriendRequest(segue:UIStoryboardSegue) { 
     println("Finished the segue.") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Это является результатом, когда я создал SEGUE выхода для кнопки (Ctrl-перетащить кнопку на «Выход 'в ViewController), я получаю звонки в таком порядке:

Preparing for segue. 
Finished the segue. 
Button Function. 

Однако, я не обязательно хочу называть prepareForSegue или раскрутку функцию каждый раз, только если сервер дает успех MESSA GE. Итак, как мне связать вещи в раскадровке, чтобы при вызове функции performSegueWithIdentifier мне не нужно было вызывать другие функции (prepareForSegue и т. Д.)?

ответ

0

Снимите выходной SEGUE с кнопки и вместо того, чтобы просто связать кнопку с новой IBAction и вставить

self.dismissViewControllerAnimated(true, completion: nil) 

Итак, ваш новый код будет:

@IBAction func saveFriendRequest(sender: AnyObject) { 
    //Do your stuff to save the friend request 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

Спасибо за помощь, это именно то, что мне нужно! – hoffware

0

Если вы хотите выполнить действие перед segue, создайте и if-statement, который определит, что действие было успешно завершено, затем выполните segue. то есть.

if (ActionSuccess) { 
self.performSegueWithIdentifier("Segue", sender: nil) 
} 
+0

Да, будет необходимо, извините за то, что не уточнил это. Как я могу заставить segue работать, не прикрепляя кнопку к выходу на контроллере представления, потому что, присоединив его, он выполняет команду prepareForSegue и разматывается перед выполнением действия кнопки? – hoffware

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