【问题标题】:How can i add 2 segue on 1 action?如何在 1 个动作上添加 2 个 segue?
【发布时间】:2014-03-24 11:08:42
【问题描述】:

我有一个 tableview 显示我的数组项。 .我用我的故事板将推送样式 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 name) 和我的 DetayEkran("detay" segue name) 创建了 2 个不同的 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 屏幕,但我的编译器显示:

开始/结束外观转换的不平衡调用。

再次感谢您的回答。

----ReUpdated Area --- Greg 解决了问题...谢谢 Greg...

我在这些代码上犯了一个巨大的错误,因为我打电话给另一个DetayEkran *detayEkran = [self.storyboard instantiateViewControllerWithIdentifier:@"DetayEkran"]; [self presentViewController:detayEkran animated:YES completion:nil];

在我的 prepareforsegue 方法中。当我删除我的 prepareforsegue 方法中的所有实例化代码时,我的应用程序工作正常......

所以

格雷格代码就像一个魅力。谢谢格雷格!

【问题讨论】:

    标签: ios objective-c uitableview uiviewcontroller segue


    【解决方案1】:

    当调用 segue 时,调用 prepareForSegue:segue 方法并处理转换,您不应手动调用 presentViewController 或推送视图控制器。

    最好的方法是为 KartDetay 和 detailviewcontroller 创建两个 segue,在故事板中使用两个不同的标识符。

    并覆盖 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 标识符。

    【讨论】:

    • 它不起作用是什么意思?请解释一下你做了什么以及发生了什么。
    • 您的代码运行良好。我是我的错,我在准备 segue 方法中添加另一个实例化视图控制器时犯了一个错误。对于那个很抱歉。再次感谢您的回答。
    • 从 prepareForSegue 中删除代码 - [self presentViewController... 你不需要这样做。在您的示例中,您不必传递任何参数,因此请删除 prepareForSegue 方法。
    【解决方案2】:

    prepareForSegue:sender: 方法在打开详细视图控制器之前被调用。它是为过渡做准备的地方,而不是展示/推送视图控制器。实际的转换是在方法被调用之后完成的。是否使用 push 或 present,取决于情节提要中的 segue 类型。

    尝试使用tableView:didSelectRowAtIndexPath: 方法而不是prepareForSegue:sender: 方法。这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-07
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多