基本上我需要在视图中有几个按钮。我希望他们都能调用一个函数,这样我就可以跟踪'状态'。
如何判断哪个按钮称为该功能?无论如何得到发件人的文本?
答案 0 :(得分:5)
在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或本地化您的应用时,标题会发生变化,这些变化也不需要更改代码。
答案 1 :(得分:3)
设置按钮的tag
属性。
您可以在Interface Builder中执行此操作(只需查看字段)。
然后在代码中:
if (sender.tag == 0) {
} else if (sender.tag == 1)
等
答案 2 :(得分: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语句。连接所有相应按钮的IBOutlet以及选择器浏览。
请记住在dealloc方法中释放IBOutlets以防止任何内存泄漏。
希望这会有所帮助!!