通过程序生成按钮的segue传递值



我有一个ViewController和一组以编程方式生成的按钮。每个按钮必须执行带有标识符的segue,并通过segue传递信息,例如按钮的编号。
如何为每个按钮添加某种唯一的id(可以由CoreData提供)并通过segue传递这个值?这是我创建按钮的代码,它被放置在for循环中。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
           action:@selector(performSegueWithIdentifier:sender:)
 forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[self.containerView addSubview:button];

要添加什么代码到按钮,例如设置一些iVar?

不要将按钮的动作设置为performSegue,而是使用自己的函数

[button addTarget:self action:@selector(myButtonPressed:)];

我的按钮的实现可以进行segue。如何知道哪个按钮被按下了?您可以存储对每个按钮的引用,然后将它们与传递到方法中的按钮对象进行比较,或者您可以使用标签属性:

button.tag = 1;

您的按钮函数可以看起来像这样。sender参数用于附加您希望prepareForSegue函数接收的任何类型的数据

- (void)myButonPressed:(UIButton *)button {
   if (button.tag == 1) {
       [self performSegueWithIdentifier:@"button1Segue" sender:@"any data you want to send"];
   }       
}

那么你的prepareForSegue看起来就像

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"button1Segue"]) {
        UIViewController *dest = segue.destinationViewController;
        dest.specialString = sender;
    }
}
更新:

UIViewController文档对sender参数有这样的说明:"你想要用来启动segue的对象。这个对象在实际segue中用于提供信息换句话说,sender参数是你如何传递信息(例如,一个对象,如字符串,数组,字典,自定义对象)给prepareForSegue方法。如果buttonA需要发送一个字符串,也许是标题,到目标viewController sender参数就是你传递它的方式。

最新更新