2014-03-24 17 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:方法。这应该可以解决你的问题。

相关问题