3

我有一个带有 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 个子视图 - 每个按钮一个?

非常感谢您的帮助!

4

3 回答 3

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...
    }
}

tag 属性可以通过 InterfaceBuilder 设置。希望这可以帮助。

于 2012-01-24T14:42:08.023 回答
4

我认为您可以通过两种方式解决:

  1. 创建一个属性,如: @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; 在您的视图控制器中并将按钮链接到它们作为 XIB 上的引用插座。
  2. 给你的 xib 上的每个按钮一个不同的标签,并询问发件人的标签,UIButton *b=(UIButton*)sender; b.tag;就像 Markus 一样详细发布。
于 2012-01-24T14:43:53.293 回答
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];
}

上面代码中的这一行实际上负责将数据传输到新创建的 subView:

[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

于 2012-01-26T13:48:57.587 回答