4

在有条件地解雇 segue 上挣扎了几天之后,由于西蒙在这里的回答,我设法解决了它。请花点时间看一下,否则您可能不明白我在说什么。我没有复制粘贴他的答案,因为他已经在那里很好地解释了。

现在我面临一个新问题。如果我有多个 View Controller 想要从一个 View Controller 中转接怎么办?

进一步解释:假设我有一个MainViewController有 2 个按钮的。单击每个按钮时,它应该转到各自的视图控制器。第一个按钮 到FirstViewController,第二个按钮 到SecondViewController

当您从一个视图控制器切换到另一个视图控制器时,可以使用西蒙回答中描述的方法。由于在该方法中,您将 segue 绑定到 View Controller itsrlf 而不是按钮,因此您只有一个带有该特定 View Controller 标识符的 segue。因此,我无法分别区分按钮点击。

有解决此问题的解决方法吗?

谢谢你。

4

3 回答 3

4

现在说这个可能有点为时过早,但我想你应该更深入地研究 Segue。

是的,您可以从按钮执行 segure。只需控制单击按钮并拖动光标即可查看您想要SEGUE 的控制器。根据我的理解,唯一的条件是每个按钮点击都会导致固定视图的转换。那里没有条件。

此外,您可以通过手动推送导航控制器

YourViewController *destViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"YourDestinationViewId"];
[self.navigationController pushViewController:destViewController animated:YES];

更新:

prepareForSegue 为时已晚,无法阻止继续进行。是的,您可以从您的视图创建多个 segues 到其他视图控制器。在这种情况下,您必须这样做。不要从按钮创建一个segue,只需在按钮单击上定义一个IBACtion,您就可以从那里进行验证,

if(validationSuccess) {
     [self performSegueWithIdentifier:@"segue1" sender:self];
} 

如果您使用的是 ios6

 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

在验证成功时返回 YES,在失败时返回 NO 以阻止其继续进行。

于 2013-03-10T11:11:39.737 回答
0

我建议你看一下修改你的代码逻辑。

如果我理解正确,您有一个带有 2 个按钮的 VC(嵌入在导航控制器中),并且您已经知道如何将每个按钮连接到不同的 VC。

您的问题是您要确保即使按下其中一个按钮,在执行操作之前也会完成验证。我会建议这是糟糕的用户界面设计,因为用户有这样的错觉,即这个按钮可能会做某事,然后他们点击它并且没有任何反应。

UIButton 可以连接到 IBActions(启动操作)和 IBOutlets(设置它们的属性)。如果这是直接在 IB 中创建的按钮,我会将其作为 Outlet 属性连接到您的类:

@property (nonatomic,weak) IBOutlet UIButton* myButton;

然后设置其启用值:

self.myButton.enabled=NO;

这将保留按钮并使其变暗。这是更好的 UI 设计,用户知道他们不应该按下按钮,因为某些条件不满足。

我会重新编写代码,以便您将此值设置为默认禁用,例如,只要您的“条件”得到满足,就可以在您的代码中适当地启用它。

显然,如果这个按钮是通过编程方式创建的(在没有 IB 的代码中),那么只需使用上面的第二个命令就很容易了。

希望这可以帮助。

于 2013-03-10T12:32:59.253 回答
0

我刚刚写了另一种从单个表中调用多个详细视图的方法。每个单元格本质上都可以显示不同的视图。该代码与您在这篇文章中看到的类似,但您基本上使用列表项上的标识符和属性来确定要显示的视图。

https://codebylarry.com/2016/07/15/multiple-detail-views-in-swift/

override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row == 1 {
        self.performSegueWithIdentifier("secondView", sender: self)
    } else {
        self.performSegueWithIdentifier(“others", sender: self)
    }
}
于 2016-07-18T19:58:00.190 回答