objective-c - 关联 UIButton

标签 objective-c ios uibutton

我正在构建一种带有许多 uibuttons 的检查表,我使用代码(不是 IB)添加它。我希望当选择某些按钮时,无法选择其他按钮。例如,我有一排按钮,分别是“低”、“中”、“高”。我不希望用户可以选择其中 2 个选项(如果他们想更改他们的选择,那也可以,一次不能选择 2 个)。

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

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

-(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' 这是我将确保每个“集合”仅选择一个按钮的方法

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

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

}
<小时/>

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

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

2) 我应该向 clickedsetRelatedButtons 方法传递什么来识别当前按钮?现在我已经有了按钮本身,但是还有更好的吗?

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

最佳答案

要将按钮的外观设置为保持选中状态,您可以执行许多不同的操作。您可以更改标签、背景颜色、文本颜色等等。 This可能会有所帮助。只是想让你知道,如果你想将其提交到应用程序商店,你不能使用实际的选择状态来显示按钮已被选择(所以不要这样做 button.selected = YES) 。 Apple 明确禁止这样做。

如果您想取消选择所有其他按钮,只需将所有按钮的外观设置为单击一个按钮时不选择即可。完成此操作后,将发送消息的按钮设置为选定的(使用您在上面决定的任何内容)。将按钮放在一个数组中,这样您只需创建一个 for 循环即可访问所有按钮(NSMutableArrayaddObject 很有帮助)。

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

我不太确定你的第三个问题在问什么,但如果你愿意,你可以子类化 UIButton 。每组按钮的数组实际上听起来是个好主意。你甚至可以做一个数组的数组。或者,您可以创建一个自定义持有者类,其中包含数组和返回您想要的内容的方法。

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

此外,尽量将你的问题集中在一件事上;如果人们必须回答多个问题,他们就不太可能回答你的问题。您可以提出任意多个问题,只需分开提问即可。

关于objective-c - 关联 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473910/

相关文章:

ios - Objective-C ios : override implementation method of class

ios - iOS 中简单的对象拖动

ios - 如何将 SpriteKit AdBanner 放置在 View 的顶部?

Swift:为什么 "performSegueWithIdentifier"会发生两次?

swift - 以编程方式创建动态多个 UIButton

ios - 使用获取的属性进行核心数据跨存储查询

c++ - 旋转二维矩形相交检测

javascript - 从 safari 调用 ios 安装的应用程序

ios - 在 ios 7 xcode 5.0.2 中使用 .Net web 服务

c# - 为什么我的 UIButton 没有响应?