【问题标题】:Pass info to viewcontroller on storyboard将信息传递给情节提要上的视图控制器
【发布时间】:2014-06-29 12:45:13
【问题描述】:
我是使用故事板的新手,我正面临这种情况:uinavigationcontroller 包含一个视图控制器(根控制器),其中包含十个按钮,每个按钮通过故事板链接到同一个视图控制器。
第二个视图控制器的行为取决于第一个视图控制器中点击的按钮,但是如何识别哪个按钮被点击(如标签值)并将此信息传递给第二个视图控制器?
谢谢。
【问题讨论】:
标签:
ios
xcode
uiviewcontroller
uinavigationcontroller
storyboard
【解决方案1】:
补充丹尼尔的回答:
首先,在您的第二个 VC 上添加一个公共属性,可以从您的第一个 VC 访问:
@interface SecondViewController : UIViewController
@property (nonatomic) int buttonTagClicked;
@end
您需要在 UIButtons 上设置标签。这可以在情节提要中完成,也可以在您的代码中以编程方式完成。我会创建一个通用的IBAction,每个按钮都链接到它。您可以稍后通过 sender 参数从按钮中提取标签。
- (IBAction)buttonClicked:(id)sender
{
[self performSegueWithIdentifier:@"pushSegue" sender:sender];
}
即链接到
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushSegue"]) {
SecondViewController *destinationVC = (SecondViewController *)[segue destinationViewController];
UIButton *selectedButton = (UIButton *)sender;
destinationVC.buttonTagClicked = selectedButton.tag;
}
}
【解决方案2】:
您可以为每个连接设置segueIdentifier。然后在您的 ViewController 中,您可以根据您设置的标识符触发一个操作。
例如:
如果您在情节提要中选择您的连接,您可以为其命名:
在您的 ViewController 中,您可以触发基于标识符的操作,如下所示:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segue1"]) {
UIViewController *destinationVC = [segue destinationViewController];
destinationVC.property = ...;
}
}