2016-09-27 2 views
0

Я использую код ниже в shouldPerformSegue. Я хочу остановить или продолжить segue, исходя из того, выбирает ли пользователь удаление или отмена.Cant return control from shouldPerformSegue при использовании UIAlertViewController в Swift

Я заметил, что segue останавливается из-за предупреждения. Если я удалю предупреждение, то segue работает нормально.

shouldPerformSegue Неправильное место использование такой проверки?

Спасибо.

let alertController = UIAlertController(title: "Confirm Delete", message: "Are you sure?", preferredStyle: UIAlertControllerStyle.alert) 

let deletelAction = UIAlertAction(title: "Delete", style: UIAlertActionStyle.destructive) { (result : UIAlertAction) -> Void in 
      print("Delete") 

    if self.selection != nil {  
     if self.selection!.delete() == true { //this is database call 
      self.success = true 
     } else { 
      self.success = false 
    } 
}   
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (result : UIAlertAction) -> Void in 
    print("Cancelled delete") 
    self.success = false 
} 
alertController.addAction(deletelAction) 
alertController.addAction(cancelAction) 
self.present(alertController, animated: true, completion: nil) 

return success 
+0

Вы устанавливаете 'success'' true/false' в пределах замыканий, поэтому вы должны использовать обратный вызов вместо метода 'return'. – Santosh

+0

Сантош, я до сих пор не использовал обратные вызовы, поэтому сначала нужно узнать. Вы проверите. – ashishn

ответ

0

Я нашел ответ спасибо на комментарий Paulw11 к this question.

Так что я удалил unind segue с кнопки «Удалить панель» и добавил из View Controller to Exit. И затем я вызываю это segue программно из метода удаления действия. Это сработало.

однако я заметил, что shouldPerformSegue не был вызван. Причина объясняется в this link: nburk, что shouldPerformSegue не будет вызываться, если segue называется программным. Это действительно разумно для инженеров Apple :)

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