2013-11-27 122 views
7

我有一個表格視圖,其中有不同類型的表格視圖單元格。在其中一個單元中,有兩個按鈕,它們在按下時加載視圖控制器。我正在使用以下功能來處理按鈕按下:iOS segue執行兩次

- (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應該推新視圖控制器。不知怎的,而不是推一次,這似乎是推兩次,所以我得到以下警告:

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]; 
    } 
} 

也許我感興趣的是,我有我的「正規」表視圖細胞的其他SEGUE,在這種情況下,我使用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]; 
    } 
} 

在這種情況下,視圖控制器被完全推入,甚至在需要時立即彈出。我在iOS7和Xcode 5上測試這個。我以前沒有遇到過這樣的問題,任何幫助將不勝感激。

+5

你確定你已經在界面構建器中正確地連接了這些動作嗎?也許你已經爲事件提供了線索,比如觸摸內部並觸及內部,而不是觸及內部。或者您也可以從代碼中再次分配segue,並在界面構建器中再次分配segue。你有檢查他們嗎?這是一個常見的錯誤。 –

+0

哦該死..你其實是對的,我也指定我的按鈕也在表視圖數據源方法..謝謝你的答案! –

回答

16

通過答案可以poyrazoğlu

你確定你已經連接好行爲正確接口 建設者?也許你已經舉辦過這樣的活動,比如觸及 ,然後在裏面觸碰,而不是觸碰裏面。或者你也可以在代碼中分配segue,並在界面構建器中再次分配segue。 你檢查過他們嗎?這是一個常見的錯誤。 -

我爲每個按鈕的內部動作分配了故事板和我的tableview的數據源方法。

感謝您的快速幫助可以poyrazoğlu

+0

哦,我真的沒有想過桌子的景觀,但很高興看到它的幫助。歡迎您:) –

+0

我還加載了新的視圖控制器2x。我從視圖控制器而不是tableview單元連接了segue,並解決了這個問題。 – JeffK

12

也許你想用視圖控制器而不是UIButtons來連接你的賽車!

你或許應該已在塞格斯有線與一些像這樣的按鈕: enter image description here

但是,你應該與視圖控制器進行佈線,而不是: enter image description here

+0

這對我有用! (Swift 4,Xcode 9)。不知道爲什麼這不被強調更多!使用委託,如果segue連接在按鈕(在表格單元格中)之間,它總是會觸發,而我的委託會在之後執行。連接到小區視圖,這不會發生,所以我的手動呼叫做segue按計劃工作。 – DavidG

1

時,我有我總是得到這個問題我的按鈕直接連接到目標視圖控制器。您需要確保您首先刪除您所做的舊segue,然後單擊當前視圖控制器(您來自的位置),然後按住CTRL並單擊目標控制器。

這應該修復它:)

5

對於斯威夫特3時,Xcode和IOS 9+,這是我在用的:請確保您從UIViewControllers,而不是按鈕或其它接口的繪圖SEGUE。

我有同樣的問題,只是改變從UIController而不是按鈕刪除此錯誤的Segue的開始。