我有一个带3个按钮的主视图。单击任何按钮可添加子视图。
按钮具有不同的标题,并且都链接到IBAction“switchView”
“switchView”代码如下。
- (IBAction)switchView:(id)sender{
secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
[self.view addSubview:myViewController.view];
}
“secondView”正确加载,一切正常。
问题是我希望能够知道哪个按钮是发件人。
我不想创建3个子视图,每个按钮一个。代码和XIB绝对相同>
唯一的区别是我想在第二个视图(viewDidLoad方法)中设置的变量,具体取决于发件人是谁(点击了哪个按钮)
这可能吗?或者我需要创建3个子视图 - 每个按钮一个?
非常感谢您的帮助!
答案 0 :(得分:16)
您可以使用tag属性识别不同的按钮。 例如用你的方法:
-(IBAction)switchView:(id)sender {
UIButton *button = (UIButton*)sender;
if (button.tag == 1) {
//TODO: Code here...
} else if (button.tag == 2) {
//TODO: Code here...
} else {
//TODO: Code here...
}
}
可以通过InterfaceBuilder设置tag属性。 希望这会有所帮助。
答案 1 :(得分:4)
我认为你可以通过两种方式解决:
@property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3;
在您的viewcontroller中,将按钮链接到它们作为XIB上的引用插座。UIButton *b=(UIButton*)sender; b.tag;
发送者的标记,例如Markus详细发布。答案 2 :(得分:0)
解决我的问题一切都归结为在mainView和subView之间传输数据。
在我的mainView.h中,我声明了一个NSString及其@property
...
NSString *btnPressed;
}
@property(nonatomic, retain) NSString *btnPressed;
...
然后在switchView方法中的mainView.m中我做了这个:
- (IBAction)switchView:(id)sender{
secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
btnPressed = [NSString stringWithFormat:@"%i", [sender tag]];
[myViewController setBtnPressed:self.btnPressed];
[self.view addSubview:myViewController.view];
}
上面代码中的这一行实际上负责将数据传输到新创建的子视图:
[myViewController setBtnPressed:self.btnPressed];
然后在我的secondView.h中,我声明了完全相同的NSString * btnPressed及其@property(尽管这是一个与main中声明的完全不同的对象)
然后在我的secondView.m中,我得到了我感兴趣的按钮的值。
- (void)viewDidLoad {
[super viewDidLoad];
int theValueOfTheButtonPressed = [self.btnPressed intValue];
}
这很有效。
别忘了@synthesize btnPressed;以及[btnPressed release];在mainView.m和secondView.m
中