关联UIButton

时间:2012-07-13 15:49:20

标签: objective-c ios uibutton

我正在构建一种带有许多uibutton的检查表,我使用代码(而不是IB)添加。我想要的是,当选择某些按钮时,无法选择其他按钮。例如,我有一行按钮,它们是LOW,MEDIUM,HIGH。我不希望用户可以选择2个选项(如果他们想要改变他们的选择那么好,一次只能改变2个。)

我知道我的方法的一般结构,这是我到目前为止所拥有的:

-(void)addButtons这是我用按钮填充视图的地方(这里只显示一个按钮,但有很多):

-(void)addButtons{

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"" forState:UIControlStateNormal];
    button.frame = CGRectMake(209, 54, 127, 18);
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [imageView addSubview:button];

}

-(void)clicked:(UIButton *)sender这是单击按钮时将调用的方法。我希望它将自己作为参数提交。然后该按钮将更改其外观以表示已单击该按钮。我之所以透明,是因为我在图像上方有按钮,你需要看看它们下面是什么。我也不认为sender.backgroundColor = [UIColor redColor];会像我想要的那样工作,但这不是重点。

-(void)clicked:(UIButton *)sender{

    sender.alpha = 0.5;
    sender.backgroundColor = [UIColor redColor];

    [self setRelatedButtons:sender];

}

-(void)setRelatedButtons'这就是我确保每个'set'只选择一个按钮的方法

-(void)setRelatedButtons:(UIButton *)sender{

    //since I know this button is clicked
    //set related buttons to unclicked

}

总结一切,这就是我想知道的事情:

1)如何设置按钮的外观以保持选中状态?

2)我应该传递给clickedsetRelatedButtons方法来识别当前按钮?现在我有按钮本身但有更好的东西吗?

3)关联某些按钮的最佳方式是什么?我可以为每组按钮使用一个数组,但我希望有更好的方法。我可以使用typedef吗? (从未使用过其中之一)

1 个答案:

答案 0 :(得分:1)

要设置按钮的外观以保持选中状态,您可以执行许多不同的操作。您可以更改标签,背景颜色,文本颜色等。 This可能对此有所帮助。您知道,如果您想将此内容提交到应用商店,则无法使用实际选择状态来显示已选择按钮(因此请勿执行button.selected = YES)。 Apple特别禁止这一点。

如果要取消选择所有其他按钮,只需在单击一个按钮时将所有按钮的外观设置为未选中。在您这样做之后,将发送消息的按钮设置为选中(无论您从上面决定了什么)。将您的按钮放在一个数组中,这样您就可以创建一个for循环来访问所有这些按钮(NSMutableArrayaddObject有帮助。)

要回答你的第二个问题,传递UIButton *本身很好(你实际上只是传递一个指针)。这样做的好处是能够执行[button doSomething]之类的操作,而不必在数组或其他数据类型中找到它。

我不太确定你的第三个问题是什么,但你可以根据需要继承UIButton。每组按钮的数组实际上听起来都是个好主意。你甚至可以做一个数组数组。或者您可以使用方法创建一个包含数组的自定义holder类,以返回您想要的内容。

如果使用数组,则可以将整数传递给addButton方法,该方法告诉方法将按钮放入哪个数组(或复杂数组的一部分)。

另外,尽量将你的问题放在一件事上;如果他们必须回答多个问题,人们就不太可能回答你的问题。您可以根据需要提出尽可能多的问题,只需单独询问即可。