2014-03-24 18 views
0

我有一個tableview顯示我的數組項。 。我把故事板的push style segue連接到detailviewcontroller屏幕,但我不想所有的東西都去detailviewcontroller,所以我做了一個這樣的控制器;我如何在1行動中添加2個segue?

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

if (sender == self.btnEkle) return; 
if (sender == self.btnKrediKartlarim) return; 

NSString *bankaAdi = [[mainList objectAtIndex:indexPath.row] objectForKey:@"BankaAdi"]; 

if (bankaAdi.length > 1) { 

    KartDetay *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"KartDetay"]; 

    [self presentViewController:vc animated:YES completion:nil]; 

} 

如果bankaAdi.length> 1我的應用程序應該去KartDetay

如果它不是我的意思是還有我的應用程序應該去detailviewcontroller

這些代碼工作,但有錯誤在我的編譯器中。

不平衡呼叫開始/結束外觀轉換。

對不起,我的英文我知道我沒有清楚地描述自己,但請儘量幫助我。

謝謝!

---更新區域----

首先感謝您answer.But它不工作或我不能做到這一點。

1-我創建2個曼努埃爾不同塞格斯到我KartDetay( 「taksit」 賽格瑞名)和我的DetayEkran( 「detay」 賽格瑞名)..

2-I與這些代碼使用..

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

NSIndexPath *indexPath2 = [self.tableView indexPathForSelectedRow]; 
bankaAdi = [[mainList objectAtIndex:indexPath2.row] objectForKey:@"BankaAdi"]; 

if (bankaAdi.length > 1) 
{ 
    [self performSegueWithIdentifier:@"taksit" sender:nil]; 
} 

else 
    { 
    [self performSegueWithIdentifier:@"detay" sender:nil]; 
    } 

}

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

    if ([segue.identifier isEqualToString:@"taksit"]) 
    { 
    //if (sender == self.btnEkle) return; 
    //if (sender == self.btnKrediKartlarim) return; 

    KartDetay *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"KartDetay"]; 
    [self presentViewController:vc animated:YES completion:nil]; 

    } 
else 
    { 

     DetayEkran *detayEkran = [self.storyboard instantiateViewControllerWithIdentifier:@"DetayEkran"]; 
     [self presentViewController:detayEkran animated:YES completion:nil]; 
    } 

當我運行我的應用程序,並點擊它是bankaAdi> 1我的第一個單元。

應用程序可以去KartDetay屏幕,但我的編譯器說:

不平衡呼叫開始爲/終端外形的轉變。

再次感謝您的回答。

---- ReUpdated區---問題是由Greg解決了...謝謝你的格雷格...

我做了這些代碼一個巨大的錯誤怎麼我調用另一個DetayEkran *detayEkran = [self.storyboard instantiateViewControllerWithIdentifier:@"DetayEkran"]; [self presentViewController:detayEkran animated:YES completion:nil];

在我的prepareforsegue方法中。當我刪除所有實例在我prepareforsegue方法我的應用程序工作正常代碼...

所以

格雷格碼工作就像一個魅力。謝謝格雷格!

回答

0

當segue被稱爲prepareForSegue:segue方法被調用並且它處理轉換時,您不應該調用presentViewController或手動推視圖控制器。

要做到這一點,最好的方法是在故事板中爲KartDetay和detailviewcontroller創建兩個不同標識符。

,並覆蓋didSelectRowAtIndexPath方法的方法,在這裏你檢查你的病情,並運行相應的賽格瑞:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *bankaAdi = [[mainList objectAtIndex:indexPath.row] objectForKey:@"BankaAdi"]; 

    if (bankaAdi.length > 1) { 
     [self performSegueWithIdentifier:@"YOUR1IDENTIFIER" sender:nil] 
    } 
    else 
     [self performSegueWithIdentifier:@"YOUR2IDENTIFIER" sender:nil] 

} 

如果您需要傳遞任何參數使用prepareForSegue方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"YOUR1IDENTIFIER"]) { 

     KartDetay *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"KartDetay"]; 

     [self presentViewController:vc animated:YES completion:nil]; 
    } 
    else { 
     //handle other view controller 
    } 
} 

只記得更換SEGUE標識符與你的一個。

+0

你的意思是什麼不起作用?請解釋你做了什麼和發生了什麼。 – Greg

+0

好吧,我會在第二秒更新我的問題。非常感謝你! – leonthegosu

+0

你的代碼工作正常。我是我的錯,我犯了一個錯誤,在準備segue方法時添加了另一個實例化視圖控制器。對於那個很抱歉。並再次感謝您的回答。 – leonthegosu

0

在打開詳細視圖控制器之前調用prepareForSegue:sender:方法。這是準備過渡的地方,而不是呈現/推送視圖控制器。實際的轉換是在方法被調用後完成的。是否使用推送或呈現,取決於故事板中的segue類型。

嘗試使用tableView:didSelectRowAtIndexPath:方法而不是prepareForSegue:sender:方法。這應該可以解決你的問題。

相關問題