繁体   English   中英

有条件地向多个View Controllers发送segue

[英]Fire a segue conditionally to multiple View Controllers

在有条不紊地解雇了一段时间之后,我设法解决了这个问题,这要归功于西蒙 在这里的回答。 请花点时间看一下,否则你可能无法理解我在下面谈论的内容。 我没有复制粘贴他的答案,因为他已经在那里很好地解释了。

现在我遇到了一个新问题。 如果我想从一个View Controller中选择多个View Controller,该怎么办?

进一步解释:假设我有一个带2个按钮的MainViewController 单击每个按钮时,它应该转到各自的View Controller。 第一个按钮FirstViewController和第二个按钮, SecondViewController

当您从一个View Controller转到另一个View Controller时,可以使用Simon的答案中描述的方法。 因为在该方法中,您将segue绑定到View Controller而不是按钮,您只有一个带有该特定View Controller标识符的segue。 因此我无法分别区分按钮水龙头。

是否有解决此问题的解决方法?

谢谢。

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

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

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

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

更新:

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

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

如果您使用的是ios6

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

在验证成功时返回YES,在未能阻止它继续时返回NO。

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

如果我理解正确,你有一个带有2个按钮的VC(嵌入在Nav。控制器中),你已经找到了如何将每个按钮转换为不同的VC。

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

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

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

然后设置其启用值:

self.myButton.enabled=NO;

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

我会修改代码,以便您默认将此值设置为禁用,例如,只要满足“条件”,就可以在代码中正确启用它。

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

希望这可以帮助。

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

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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM