2014-03-31 103 views
1

我有一個UINavigationController已在其加載的UITableview。這裏面UITableView我有一個prototype細胞和我永遠不會改變,並永遠不會靜態數據重用了幾次。所以,我把viewControlller它自己的兩個push segues連接到兩個他們的destination視圖控制器。這似乎工作得很好。爲了調用這些segues,我使用了UItableViews委託方法:didSelectRowAtIndexPath所以我知道哪個行被點擊了,然後轉到正確的viewControllerprepareForSegue叫了兩聲

沒有,問題,它的工作原理。

然後我增加了第三viewController和與之配套的,segue匹配,相同didSelectRowAtIndexPath前兩個和相同的設置 - 現在,當我點擊第二個單元格,這是工作,didSelectRowAtIndexPath不出所料調用,那麼它稱爲正確的繼續,然後調用prepareForSegue。然後,prepareForSegue再次被調用(在這一點上,didSelectRowAtIndexPath尚未再次調用)的prepareForSegue方法然後調用不正確SEGUE(第三賽格瑞我添加)。

我想不出是誰喊第二次的prepareForSegue方法和爲什麼它得到了錯誤的標識。

有什麼我做錯了嗎?

一些代碼樣本

這裏是didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    switch (indexPath.row) 
    { 
    case CategoryFilter: 
     { 
      [self performSegueWithIdentifier:@"FilteredCategoryView" sender:self]; 
     break; 
     } 
    case PriceFilter: 
     { 
      [self performSegueWithIdentifier:@"FilterByPriceSegue" sender:self]; 
     } 
    case ConditionFilter: 
     { 
      [self performSegueWithIdentifier:@"SearchFilterConditionSegue" sender:self]; 

     } 
    } 
} 

然後在prepareForSegue方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if ([segue.identifier isEqualToString:@"FilteredCategoryView"]){ 



     //No data to pass just yet 


    } 
    if ([segue.identifier isEqualToString:@"FilterByPriceSegue"]){ 
     //No data to pass just yet 

    } 
    if ([segue.identifier isEqualToString:@"SearchFilterConditionSegue"]){ 

     //No data to pass just yet 
    } 
} 

在上面的方法 - 我不傳送數據,只是還沒有,但我會。它的這個方法被調用兩次。

+0

代碼請..... – Balu

+0

新增的調用代碼的唯一位menially塞格斯。不確定你在找什麼其他代碼?謝謝您的幫助。 – Tander

+0

如果存在差異,請檢查賽段上的屬性。所有三個segues連接到他們自己的單元格,還是連接到view/tableview的任何segues?聽起來像一個賽格是自動觸發的。也許視圖引發了不是手動的賽段? – Moonwalkr

回答

4

你在你的switch也許這將有助於第二和第三種情況忘了break

與更改開關:

switch (indexPath.row) 
{ 
    case CategoryFilter: 
    { 
     [self performSegueWithIdentifier:@"FilteredCategoryView" sender:self]; 
     break; 
    } 
    case PriceFilter: 
    { 
     [self performSegueWithIdentifier:@"FilterByPriceSegue" sender:self]; 
     break; 
    } 
    case ConditionFilter: 
    { 
     [self performSegueWithIdentifier:@"SearchFilterConditionSegue" sender:self]; 
     break; 
    } 
} 

如果你不把break指令中的每個在您的情況下,交換機將執行所有其他情況,直到交換機或其他指令結束爲止。

+0

啊,你說得對。我沒有忘記休息。通常我不會忘記的東西。這麼簡單的事情。謝謝老兄。金髮時刻! – Tander

+0

享受;)明顯是有時最難找到;) –