多个UIButton 1功能

时间:2011-02-23 22:50:02

标签: iphone objective-c uibutton ibaction iboutlet

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

如何判断哪个按钮称为该功能?无论如何得到发件人的文本?

3 个答案:

答案 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以防止任何内存泄漏。

希望这会有所帮助!!