2012-01-24 5 views
12

XMLリターンによっては、UButtonタッチで現在のsegueを実行したくありません。ios segue "cancel"

私は私がしたいsegue選ぶことができます知っているがを行うが、どのように私はsegueない実行を作りますか?または少なくともは実行できませんseguesのいずれかを実行しますか?

答えて

25

デプロイメントターゲットがiOS 6.0以降の場合、セグを実行する場合はYES、そうでない場合はNOを返すように、the -[UIViewController shouldPerformSegueWithIdentifier:sender:] methodを上書きできます。

展開先がiOS 6.0より前の場合は、shouldPerformSegueWithIdentifier:sender:というメッセージは表示されません。あなたのストーリーボードでは、ボタンからセグを引き出さないでください。代わりに、ボタンのView ControllerからSegueを引き出し、Segueに識別子を与えます。 View ControllerのIBActionにボタンを接続します。アクションで、セグを実行するかどうかを確認します。それを実行したい場合は、自分自身にperformSegueWithIdentifier:sender:を送って、あなたが割り当てた識別子をストーリーボードに渡します。例えば

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

+0

は ' [self performSegueWithIdentifier:@ "myIdentifier" sender:self]; '正しい? Xcodeの 'SIGABRT' :( – Jacksonkr

+0

何が起こっているのかを見るために例外ブレークポイントを設定する必要があります –

3

Apple Developer Documentationは、ストーリーボード内で管理されてセグエをキャンセルするための正しい方法を持っている

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"listPopover"]) { 
     if (self.listPopover == nil) { 
      // Allow the popover segue 
      return YES; 
     } 
     // Cancel the popover segue 
     return NO; 
    } 
    // Allow all other segues 
    return YES; 
} 
+0

' shouldPerformSegueWithIdentifier:sender: 'メッセージはiOS 6で追加され、以前のバージョンのiOSこの質問が投稿されたとき、iOS 6はリリースされていませんでした。 –

0

は、このスレッドをチェックアウト:https://stackoverflow.com/a/42161944/4791032

することができますだけそれをチェックしてくださいfunc tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath)