2013-11-27 22 views
7

私は、さまざまなタイプのテーブルビューセルを含むテーブルビューを持っています。いずれかのセルには、2つのボタンがあり、押されたときにView Controllerをロードします。iOS segueが2回実行される

- (IBAction)leftButtonPressed:(id)sender 
{ 
    // Getting the pressed button 
    UIButton *button = (UIButton*)sender; 
    // Getting the indexpath 
    NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0]; 
    // Loading the proper data from my datasource 
    NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row]; 
    [[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]]; 
    // Everything working as it should up to this point 
    // Performing seque... 
    [self performSegueWithIdentifier:@"buttonSegue" sender:self]; 
} 

私のbuttonSegueは、新しいView Controllerをプッシュすることになっています。代わりに、一度押すとどういうわけか、それは二度押しているように見えるので、私は次の警告を得る:私はアプリがすぐにポップアップ表示したいイベントがあるので、それは、クラッシュにつながる私の場合は

2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar 
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 

をそれは私のテーブルビューに戻るビューコントローラです。私はこのためにalertviewを使用して、次でイベントを処理します。それは私が面白い私は「通常の」テーブルビューのセルから他のセグエを持っていることに注意することがあります

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
    // ... 
    // Additional checking of button titles.... 
    else if ([buttonTitle isEqualToString:NSLocalizedString(@"Vissza", nil)]) 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

、その場合には、私はprepareForSegueを使用します:メソッド

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"detailSegue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     SOEvent *selectedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indexPath.row]; 
     [[SOEventManager sharedEventManager] setSelectedEvent:selectedEvent]; 
    } 
} 

この場合、View Controllerは完全にプッシュされ、必要な場合はすぐにポップされます。私はiOS7とXcode 5でこれをテストしています。私は前にこのような問題に遭遇していません、どんな助けも大いに評価されるでしょう。

+5

あなたはインターフェースビルダーでアクションを正しく配線していますか?たぶんあなたは、内側に触れるだけでなく、内側に触れるのではなく内側に触れるというイベントを結んでいるかもしれません。あるいは、コードビルダーとインターフェースビルダーの両方からSegueを割り当てたこともあります。あなたはそれらをチェックしましたか?それはよくある間違いです。 –

+0

ああああ。あなたは実際には正しいです、私はまた、テーブルビューのデータソースメソッドで私のボタンを割り当てる..あなたの答えをありがとう! –

答えて

16

によって回答がpoyrazoğluことができます。

はあなたが正しくインターフェイス ビルダーでアクションをアップしました有線よろしいですか?おそらく、あなたは内部に触れる代わりに、 の内側に触れ、内部をタッチするためにイベントを配線しているかもしれません。あるいは、 にもコードビルダーからsegueが割り当てられ、インターフェースビルダーでもう一度割り当てられているかもしれません。 あなたはそれらをチェックしましたか?それはよくある間違いです。 -

私はストーリーボードと私のtableviewのデータソースメソッドの両方のボタンごとにアクションを内部に割り当てていました。

あなたのクイックヘルプありがとうございますポーラーズロック !!

+0

ああ、私はテーブルビューについて本当に考えなかったが、それが助けてくれてうれしかった。あなたは歓迎です:) –

+0

2xも新しいビューコントローラをロードしていました。私はsegueをviewviewセルの代わりにView Controllerから接続し、これが問題を解決しました。 – JeffK

12

UIButtonsの代わりにView Controllerであなたのセグを接続したいかもしれません!

おそらく、このようないくつかのボタンで有線seguesている必要があります enter image description here

をしかし、あなたの代わりにビューコントローラでそれらを配線する必要があります enter image description here

+0

これは私のために働いた! (スイフト4、Xcode 9)。これがなぜ強調されないのか分かりません!デリゲートを使用すると、segueがボタン(テーブルセル内)の間に配線されていた場合、それは常に起動し、後でデリゲートが実行されます。セルのビューに配線されて、これは起こらないので、セグをする私の手動呼び出しは、計画通りに動作します。 – DavidG

1

私が持っているとき、私はいつもこの問題を取得します私のボタンは直接デスティネーションビューコントローラに配線されています。あなたは最初にあなたが行った古いセグを削除してから、現在のビューコントローラ(あなたが来ている場所)をクリックし、CTRL +クリックして宛先コントローラをクリックする必要があります。

これは、それを修正する必要があります:)

5

私が使っているものですスウィフト3、Xcodeの、とiOS 9+について:あなたはUIViewControllersではなく、ボタンまたは他のインターフェースからセグエを描いていることを確認します。

私は同じ問題を抱えていましたが、ボタンの代わりにUIControllerからセグの開始点を変更するだけで、このバグが削除されました。

関連する問題