将UIViewController传递给另一个ViewController中的另一个Button

时间:2012-05-30 01:31:53

标签: iphone ios xcode

我有三个这样的按钮,每个按钮对应一个不同的UIViewController

enter image description here

例如,我按下按钮1.它将传递给开始按钮,视图控制器对应于它将显示的那个数字。

我需要能够在此按钮中传递它:

enter image description here

有可能吗?

2 个答案:

答案 0 :(得分:1)

是的,只需在按钮点击上显示的视图控制器上创建UIButton属性即可。然后,在按钮点击的处理程序中,使用新控制器上的按钮属性在显示新控制器之前指定按钮。

示例代码:

//here's your method invoked when pressing the button 1
- (IBAction) pressedButtonOne:(id) sender {
    NewViewController *newVc = [[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
    newVc.startButton = self.startButton;
}

这是按下按钮1时创建的控制器中的代码

NewViewController.h

#import <UIKit/UIKit.h>
@interface NewViewController : UIViewController
@property (nonatomic, retain) UIButton *startButton;

//NewViewController.m
- (void) viewDidLoad {
    //use self.startButton here, for whatever you need
}

答案 1 :(得分:1)

如果我正确理解了这个问题:让我们来谈谈第一个按钮(你可以把它推广到其他按钮和VC)。假设关联的viewController被称为button1ViewController。

在你的button1ViewController中,声明一个名为button的属性(@property(强,非原子)UIButton *按钮 - 也合成)..

在您的IBAction方法中。

-(IBAction) button1Tapped:(id)sender {

button1ViewController.button = sender;

[self presentViewController:button1ViewController;

}

修改 :我想我现在就得到了这个问题。

在mainView控制器中声明一个实例变量:UIViewController * pushingController。 还声明实例Button1ViewController * button1ViewController; ,Button2ViewController * button2ViewController,Button3ViewController * button3ViewController。

现在:

-(IBAction) button1Pressed:(id)sender {
     if (button1ViewController==nil) {
button1ViewController = [Button1ViewController alloc] init];
}

pushedController = button1ViewController;

}

-(IBAction) button2Pressed:(id)sender {
     if (button2ViewController==nil) {
button2ViewController = [Button2ViewController alloc] init];
}

pushedController = button2ViewController;

}


//same thing for button 3 pressed with button 3 controller


-(IBAction) startButtonPressed:(id) sender {

if (pushedViewController!=nil)
[self presentViewController:pushedViewController animated:YES completion:NULL];

}

我认为这应该有效,但我自己没有尝试过代码。