IOS的最佳射频button实现
我想问一下在iPhone应用上如何实现radio-button选项。
我发现Picker View对于一个简单的selectfunction来说相当大。
我不确定苹果是否故意排除单选button,以及从可用性/用户体验angular度来看是否更好地使用选取器视图。
我有一些关于如何最好的单选button实现的想法。 它可以基于UIButton
类,并使用它的“select”状态来指示组中的一个。 UIButton
在IB中具有本地定制选项,因此deviseXIB很方便。 也应该有一个简单的方法来使用IBsockets连接分组button:
我在这个RadioButton类中实现了我的想法。 奇迹般有效:
下载示例项目 。
试试UISegmentedControl 。 它的行为与单选button类似 – 提供了一系列的select,并让用户select1。
只是想总结一下,可能有4种方法。
- 如果空间不足,请为文本或button添加单击事件,然后显示UIPickerView:
或用复选标记打开一个新的表格视图控件:
- 如果有更多的空间,直接添加一个表视图到你的主视图:
- 最终的解决scheme是使用UISegmentedControl:
希望这可以帮助。
试试DLRadioButton ,适用于Swift
和ObjC
。 您还可以使用图像来指示select状态或自定义您自己的样式。
在GitHub上检查一下。
**更新:添加了select指标在右侧的选项。
**更新:添加方形button, IBDesignable
,改善性能。
**更新:添加了多个select支持。
对于选项屏幕,特别是有多个广播组的地方,我喜欢使用分组表格视图。 每个小组都是一个广播组,每个小组都是小组内的一个select。 使用单元格的辅助视图来显示指定您想要的选项的复选标记是微不足道的。
如果只有UIPickerView可以制作得稍微小点,或者他们的渐变更适合将两个页面拼接起来。
我写了一个控制器来处理单选button数组背后的逻辑。 这是开源的,在GitHub上,看看!
我知道很晚才回答这个问题,但希望这可以帮助任何人。
您可以使用IBOutletCollection
创buildbutton,如单选button。 在我们的.h文件中创build一个IBOutletCollection属性。
@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *ButtonArray;
连接所有的button与这个IBOutletCollection并为所有三个button做一个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]; } }
-(void)radiobutton:(id)sender { ischecked =!ischecked; UIButton *check = (UIButton*)sender; if(ischecked == NO) [check setImage:[UIImage imageNamed:@"checkbox1.png"] forState:UIControlStateNormal]; else [check setImage:[UIImage imageNamed:@"checkbox-pressed.png"] forState:UIControlStateNormal]; }
在iOS应用程序中创build单选button的以下简单方法遵循两个步骤。
第1步 – 将此代码放入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];
第二步 – 把下面的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; } }