3

基本上我需要在一个视图中有几个按钮。我希望他们都调用一个函数,以便我可以跟踪“状态”。

如何判断哪个按钮调用了该功能?反正有没有得到发件人的文本?

4

3 回答 3

5

在 iOS 操作方法中,包括 IBAction 方法,可以具有以下任何签名(请参阅“ UIKit 中的 Target-Action ”):

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

如果您使用接受发送者的方法签名,那么您可以访问触发该操作的对象。然后,您可以访问调用对象的属性,包括其标题和标签。您还可以将发送者与您可能已经拥有的按钮指针进行比较,以确定哪个按钮是此特定事件的发送者。

我喜欢比较指针,因为我相信它比orif (sender == self.nextPageButton)更容易理解并且不太可能破坏。查看 IB 中的标签并不能告诉您代码假设它们的含义以及它们是否重要。标题会随着您更新 UI 或本地化应用程序而更改,这些更改也不需要更改代码。if (sender.tag == 4)if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"])

于 2011-02-23T23:15:39.277 回答
3

设置tag按钮的属性。

您可以在 Interface Builder 中执行此操作(只需查看字段)。

然后在代码中:

if (sender.tag == 0) {
} else if (sender.tag == 1)

等等

于 2011-02-23T22:52:04.307 回答
1

您无需明确设置标签。您可以在 .h 文件中定义 UIButton 的 IBOutlets 及其属性以及

@property (nonatomic , retain) IBOutlet UIButton *myButton;

和方法为

-(IBAction) browse : (id) sender; 

在 .m 文件中,您可以将该方法实现为

-(IBAction) browse : (id) sender{

    if((UIButton *)sender == myButton){/*add the action here*/}
 } 

在方法中为您希望的任意数量的按钮添加更多 if 语句。请连接所有相应按钮的 IBOutlets 以及选择器浏览。

请记住在 dealloc 方法中释放 IBOutlets 以防止任何内存泄漏。

希望这可以帮助!!

于 2011-02-24T10:48:14.407 回答