IOS 的最佳单选按钮实现
Posted
技术标签:
【中文标题】IOS 的最佳单选按钮实现【英文标题】:Best radio-button implementation for IOS 【发布时间】:2011-06-18 08:26:57 【问题描述】:我想问一下是否有关于如何在 iPhone 应用上实现单选按钮选项的示例。
我发现 Picker View 对于一个简单的选择功能来说相当大。
我不确定 Apple 是否故意排除了单选按钮,以及从可用性/用户体验的角度来看,简单地使用 Picker View 是否更好。
【问题讨论】:
看看这个很棒的教程iPhone UIButton tutorial: Radio Buttons。 我认为它是故意变大的。例如,iPhone 上的 Safari 使用选择框的选取器视图。我建议您遵循您正在开发的设备上的标准(在这种情况下是选择器视图),而不是您迄今为止正在使用的其他机器上习惯的(在这种情况下是单选按钮)。 【参考方案1】:对于选项屏幕,尤其是在有多个单选组的情况下,我喜欢使用分组表视图。每个组是一个无线电组,每个小区是组内的一个选择。使用单元格的辅助视图作为复选标记来指示您想要的选项是微不足道的。
如果 UIPickerView 可以做得更小一点,或者它们的渐变更适合将两个平铺到一个页面上...
【讨论】:
有任何与此分组表视图相关的示例吗? 你能链接任何如何使用它的例子吗?【参考方案2】:试试UISegmentedControl。它的行为类似于单选按钮——呈现一系列选项并让用户选择 1。
【讨论】:
希望 Apple 的文档中包含图片。 叹息 适合水平展示,但垂直展示呢?在我的情况下,我想要一个单选按钮,其中一个表格单元格包含每个组件单选按钮。【参考方案3】:我编写了一个控制器来处理一系列单选按钮背后的逻辑。它是开源的,在 GitHub 上,看看吧!
https://github.com/goosoftware/GSRadioButtonSetController
【讨论】:
嗨西蒙!我尝试使用 GSRadioButtonSetController,效果很好。谢谢。但是如何取消选择按钮?我试过'myButton.selected = YES;'但是当尝试再次选择按钮时,它不会被选中。有什么想法吗? 试试myController.selectedIndex = NSNotFound
很好,但我可以将它与 UITableView 集成吗?我的意思是在单元格的右上角有单选按钮,在单元格上选择让它们被选中?【参考方案4】:
只想总结一下,可能有4种方法。
如果你没有太多空间,为文本或按钮添加点击事件,然后显示 UIPickerView:或用复选标记打开一个新的表格视图控件:
如果有更多空间,直接在主视图中添加一个表格视图: 最终的解决方案是使用 UISegmentedControl:希望这会有所帮助。
【讨论】:
【参考方案5】:我对最好的单选按钮实现应该是什么样子有一些想法。它可以基于UIButton
类并使用它的“选定”状态来指示组中的一个。 UIButton
在 IB 中有原生的自定义选项,因此设计 XIB 很方便。
还应该有一种使用 IB 插座连接对按钮进行分组的简单方法:
我已经在这个RadioButton 课程中实现了我的想法。像魅力一样工作:
Download the sample project.
【讨论】:
我已经下载了你的应用程序。如果我复制害虫你的按钮,它对我来说非常有用,但如果我尝试添加额外的按钮,它对我不起作用。我已将 groupButton、选中、未选中的图像、目标类添加到 RadioButton,但即使添加到您的 groupButton 手势中,也无法添加更多正常工作的按钮?【参考方案6】:试试DLRadioButton,对Swift
和ObjC
都有效。您还可以使用图像来指示选择状态或自定义您自己的样式。
查看GitHub。
**更新:添加了将选择指示器放在右侧的选项。
**更新:添加方形按钮IBDesignable
,提高了性能。
**更新:添加了多选支持。
【讨论】:
我刚刚将它包含在我正在构建的项目中,谢谢!一些注意事项,该控件需要代码隐藏,它不能仅使用设计器工作.. @DavidLiu 我正在尝试运行包含的示例,它没有给出任何触摸响应,您能指导一下 @vishwa.deepak 不确定你的意思。我刚刚测试了最新的样品,它工作得很好。如果您还有其他问题,请告诉我。 @DavidLiu 不知道昨晚发生了什么完全卡住了,今天我尝试时它像魅力一样工作,但我仍然有一个问题,因为它是单选按钮,然后至少一个它们应该被预选,或者应该有一个预选选项。 您可以通过将 'selected' 设置为 YES 以编程方式设置它们。【参考方案7】:以下在 ios 应用中创建单选按钮的简单方法分为两个步骤。
Step1- 将此代码放入您的 viewDidLoad 或任何其他所需的方法中
[_mrRadio setSelected:YES];
[_mrRadio setTag:1];
[_msRadio setTag:1];
[_mrRadio setBackgroundImage:[UIImage imageNamed:@"radiodselect_white.png"] forState:UIControlStateNormal];
[_mrRadio setBackgroundImage:[UIImage imageNamed:@"radioselect_white.png"] forState:UIControlStateSelected];
[_mrRadio addTarget:self action:@selector(radioButtonSelected:) forControlEvents:UIControlEventTouchUpInside];
[_msRadio setBackgroundImage:[UIImage imageNamed:@"radiodselect_white.png"] forState:UIControlStateNormal];
[_msRadio setBackgroundImage:[UIImage imageNamed:@"radioselect_white.png"] forState:UIControlStateSelected];
[_msRadio addTarget:self action:@selector(radioButtonSelected:) forControlEvents:UIControlEventTouchUpInside];
Step2- 在你的类中加入以下 IBAction 方法
-(void)radioButtonSelected:(id)sender
switch ([sender tag ])
case 1:
if ([_mrRadio isSelected]==YES)
// [_mrRadio setSelected:NO];
// [_msRadio setSelected:YES];
genderType = @"1";
else
[_mrRadio setSelected:YES];
[_msRadio setSelected:NO];
genderType = @"1";
break;
case 2:
if ([_msRadio isSelected]==YES)
// [_msRadio setSelected:NO];
// [_mrRadio setSelected:YES];
genderType = @"2";
else
[_msRadio setSelected:YES];
[_mrRadio setSelected:NO];
genderType = @"2";
break;
default:
break;
【讨论】:
【参考方案8】:我知道现在回答这个问题已经很晚了,但希望这可以帮助任何人。
您可以使用IBOutletCollection
创建类似单选按钮的按钮。在我们的 .h 文件中创建一个 IBOutletCollection 属性。
@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *ButtonArray;
用这个 IBOutletCollection 连接所有按钮,并为所有三个按钮创建一个 IBAction 方法。
- (IBAction)btnTapped:(id)sender
for ( int i=0; i < [self.ButtonArray count]; i++)
[[self.ButtonArray objectAtIndex:i] setImage:[UIImage
imageNamed:@"radio-off.png"]
forState:UIControlStateNormal];
[sender setImage:[UIImage imageNamed:@"radio-on.png"]
forState:UIControlStateNormal];
【讨论】:
您可以将设置图像的行移到 for 循环之外的发件人处。这样它就不会在每次循环迭代时都被执行。以上是关于IOS 的最佳单选按钮实现的主要内容,如果未能解决你的问题,请参考以下文章
在 WinForms 中对一组单选按钮进行数据绑定的最佳方法