我有一个显示我的数组项目的tableview。 。我用我的故事板将push style segue连接到detailviewcontroller屏幕,但我不想把所有项目都转到detailviewcontroller,所以我做了一个像这样的控制器;
-(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
这些代码正在运行,但我的编译器出错了。
不平衡调用开始/结束外观转换。
对不起我的英语我知道我没有清楚地描述自己,但请尽量帮助我。
谢谢!
---更新区----
首先感谢您的回答。但它不起作用或我无法做到。
1-我为我的KartDetay(“taksit”segue名字)和我的DetayEkran(“detay”segue名字)创建了2个manuel不同的segues ..
2 - 我使用这些代码..
-(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屏幕,但我的编译器说:
不平衡调用开始/结束外观转换。
再次感谢您的回答。
----重新更新区域 - 问题由Greg解决......谢谢你的Greg ......
我用这些代码犯了一个大错,因为我称之为另一个DetayEkran *detayEkran = [self.storyboard instantiateViewControllerWithIdentifier:@"DetayEkran"];
[self presentViewController:detayEkran animated:YES completion:nil];
在我的prepareforsegue方法中。当我删除我的prepareforsegue方法中的所有实例化代码时,我的应用程序工作正常...
所以
Greg代码就像魅力一样..谢谢Greg!
答案 0 :(得分:0)
在打开详细视图控制器之前调用prepareForSegue:sender:
方法。它是准备过渡的地方,而不是呈现/推动视图控制器。实际转换是在调用方法后完成的。是使用推送还是现在,取决于故事板中的segue类型。
尝试使用tableView:didSelectRowAtIndexPath:
方法而不是prepareForSegue:sender:
方法。这应该可以解决你的问题。
答案 1 :(得分:0)
当调用segue时,调用prepareForSegue:segue方法并处理转换,不应该手动调用presentViewController或推送视图控制器。
最好的方法是在故事板中为KartDetay和detailviewcontroller创建两个不同的标识符。
并覆盖didSelectRowAtIndexPath方法,您可以在其中检查条件并运行相应的segue:
-(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标识符替换为您的标识符。