[英]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.