【发布时间】:2011-02-23 22:50:02
【问题描述】:
基本上我需要在一个视图中有几个按钮。我希望他们都调用一个函数,以便我可以跟踪“状态”。
如何判断是哪个按钮调用了该函数?有没有办法获取发件人的文字?
【问题讨论】:
标签: iphone objective-c uibutton ibaction iboutlet
基本上我需要在一个视图中有几个按钮。我希望他们都调用一个函数,以便我可以跟踪“状态”。
如何判断是哪个按钮调用了该函数?有没有办法获取发件人的文字?
【问题讨论】:
标签: iphone objective-c uibutton ibaction iboutlet
在 iOS 操作方法中,包括 IBAction 方法,可以具有以下任何签名(请参阅“Target-Action in UIKit”):
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event
如果您使用接受发送者的方法签名,那么您可以访问触发该操作的对象。然后,您可以访问调用对象的属性,包括其标题和标签。您还可以将发送者与您可能已经拥有的按钮指针进行比较,以确定哪个按钮是此特定事件的发送者。
我喜欢比较指针,因为我相信if (sender == self.nextPageButton) 比if (sender.tag == 4) 或if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"]) 更容易理解并且不太可能中断。查看 IB 中的标签不会告诉您代码假设它们的含义以及它们是否重要。标题会随着您更新 UI 或本地化应用程序而改变,这些更改也不需要更改代码。
【讨论】:
设置按钮的tag属性。
您可以在 Interface Builder 中执行此操作(只需查看字段)。
然后在代码中:
if (sender.tag == 0) {
} else if (sender.tag == 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 以防止任何内存泄漏。
希望这会有所帮助!
【讨论】: