通过segue传递值,以便以编程方式生成按钮

时间:2014-07-09 22:38:35

标签: ios objective-c uibutton segue

我有一个ViewController和一组以编程方式生成的按钮。每个按钮必须执行带有标识符的segue并通过segue传递信息,例如,按钮的编号。
如何为每个按钮(可由CoreData提供)添加某种唯一ID,并通过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?

1 个答案:

答案 0 :(得分:1)

请勿为您的按钮设置执行动作,而是使用您自己的功能

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

我按钮的实施可以做segue。如何知道按下了哪个按钮?你可以存储对每个按钮的引用,然后将它们与传递给方法的按钮对象进行比较,或者你可以使用tag属性:

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 doc有关于sender参数的说法:"您要用来启动segue的对象。在实际的segue期间,此对象可用于提供信息。"换句话说,sender参数是将信息(例如字符串,数组,字典,自定义对象等对象)传递给prepareForSegue方法的方式。因此,如果buttonA需要向目标viewController发送字符串(可能是它的标题),则sender参数是您传递它的方式。