【问题标题】:How to pass prepareForSegue programmatically an objected created programmatically如何以编程方式传递 prepareForSegue 以编程方式创建的对象
【发布时间】:2016-10-10 07:34:54
【问题描述】:

我有一个循环,我在其中创建带有调用 prepareForSegue 的选择器的按钮。我会将我单击的按钮的图像传递到下一页。

for (i = 1; i <=  22; i++) //22 it's just temporary
{
    //creating button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:self
               action:@selector(nextPage: )
     forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"" forState:UIControlStateNormal];
    button.frame = CGRectMake(X, Y, 100.0, 100.0);
    UIImage *buttonImageNormal = [UIImage imageNamed:@"ambient.png"]; 

    //image obviously will be different and i want to pass that



    [button setBackgroundImage:buttonImageNormal forState:UIControlStateNormal];
    if (i%3==0 && i==0)
        X = 20;
    if (i%3==0 && i!=0){
        X = 20;
        Y = Y+150;
    }
    if (i%3==1)
        X = 140;
    if (i%3==2)
        X = 260;
    [_scroll addSubview:button];
}

这是每个按钮调用的方法

-(void)nextPage:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"signSegue"];
[self.navigationController pushViewController: myController animated:YES];
}

这就是prepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

addController *controller = (addController *)segue.destinationViewController;
}

我必须通过控制器传递什么?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    你可以这样做

    -(void)nextPage:(id)sender {
    
        UIButton *pressedButton=(UIButton *)sender;
        SecondViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
        myController.pressedButtonImageName=pressedButton.currentBackgroundImage;
        [self.navigationController pushViewController: myController animated:YES];
    }
    

    在你的第二个 VC 中:

    @property (nonatomic,strong) UIImage *pressedButtonImageName;
    

    在这里,你不需要对prepareForSegue 方法做任何事情。

    【讨论】:

      【解决方案2】:

      您不应该直接致电prepareForSegue。相反,您应该 trigger your segue programmatically,让框架负责在适当的时候调用 prepareForSegue

      [self performSegueWithIdentifier:@"mySegue" sender:self];
      

      【讨论】:

        猜你喜欢
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 2013-03-10
        • 2013-11-15
        • 2013-12-28
        相关资源
        最近更新 更多