如何在代码中引用不同的UIButton

时间:2012-03-01 23:33:41

标签: objective-c ios xcode

我正在iphone上构建计算器用于学习目的。

我有一种情况,我有多个操作(+, - ,/)按钮和多个操作数按钮,例如1,2,3等。

所以所有的操作都连接到我的viewController中的operationPressed方法。

UI构建器中是否有一种方法可以识别每个UIButton,而不是在视图中使用Text作为按钮?

什么是最佳做法?


更新

我可以在UI构建器中设置的标识标签怎么样?我可以参考一下吗?

我问的原因是我想识别按钮但是说'/'但是按钮上的文字是'÷'所以这就是为什么我需要一些其他的字符串标识符,最终可以作为参数传递给我模型。 http://cl.ly/3H1j032f1M1d3A2Y3501

3 个答案:

答案 0 :(得分:2)

通常处理此方法的方法是将每个按钮的tag属性设置为某个唯一的整数值,并编写采用sender参数的操作方法,例如:

- (void)operationPressed:(id)sender
{
    // cast the argument to a more specific type
    UIButton *button = (UIButton *) sender;

    // get the view's tag
    NSInteger tag = [button tag];

    // Do whatever it was you were going to do...
}

修改

以下是来自tag的{​​{1}}属性的声明:

UIView.h

答案 1 :(得分:1)

您可以在.xib或代码中定义按钮的标签(button.tag = 123)

与发件人一起定义您的IBAction,并检查按下了哪个按钮。

- (void) operationPressed: (id) sender
{
    UIButton *op = (UIButton *) sender;

    switch(op.tag)
    {
        case 1: break; // op 1
        case 2: break; // op 2
        ...
    }
}

[编辑:2012年3月2日]使用Storyboard

在故事板场景中,选择UIButton,然后在右侧窗格中,转到按钮属性,向下滚动以查看按钮的视图属性,您可以在那里设置标记值。

答案 2 :(得分:0)

在为Interface Builder中的每个按钮定义标签之前,您还可以为每个按钮创建一个插座并在Interface Builder中连接它

- (void)operationPressed:(id)sender
{
    if(self.operationMultiplyButton == sender){

    } else if(…) {

    }

}

就我个人而言,我试图避免使用标签的解决方案,因为在我看来,他们会转向冗余信息:指针已经是一个独特的值,而不是增加了文档的需求。