带复选框的iOS构建窗体
我正在用我的应用程序中的复选框构建一个表单,当然,XCode库实际上并没有提供复选框作为表单选项(疯狂);因此,我创建了带有类似于复选框(选中/未选中)的图像的按钮 也就是说,我的表单相当长,需要20多个复选框——如果我理解正确,每个复选框都必须单独“连接”例如有关我的屏幕上的三个复选框,请参阅下面的代码。。。我无法想象必须为20个复选框(更不用说3个)完成所有这些操作-有更好的方法吗?非常感谢您的帮助/建议 .h带复选框的iOS构建窗体,ios,objective-c,Ios,Objective C,我正在用我的应用程序中的复选框构建一个表单,当然,XCode库实际上并没有提供复选框作为表单选项(疯狂);因此,我创建了带有类似于复选框(选中/未选中)的图像的按钮 也就是说,我的表单相当长,需要20多个复选框——如果我理解正确,每个复选框都必须单独“连接”例如有关我的屏幕上的三个复选框,请参阅下面的代码。。。我无法想象必须为20个复选框(更不用说3个)完成所有这些操作-有更好的方法吗?非常感谢您的帮助/建议 .h @interface PetRegistrationViewController
@interface PetRegistrationViewController : UIViewController {
BOOL checked1;
BOOL checked2;
BOOL checked3;
}
@property (weak, nonatomic) IBOutlet UIButton *checkboxButton;
@property (weak, nonatomic) IBOutlet UIButton *checkboxButton2;
@property (weak, nonatomic) IBOutlet UIButton *checkboxButton3;
- (IBAction)checkButton:(id)sender;
- (IBAction)checkButton2:(id)sender;
- (IBAction)checkButton3:(id)sender;
.m
@synthesize checkboxButton;
@synthesize checkboxButton2;
@synthesize checkboxButton3;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
checked1 = NO;
checked2 = NO;
checked3 = NO;
}
- (IBAction)checkButton:(id)sender {
if (!checked1) {
[checkboxButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
checked1 = YES;
NSLog(@"button 1");
}
else if (checked1) {
[checkboxButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
checked1 = NO;
}
}
- (IBAction)checkButton2:(id)sender {
if (!checked2) {
[checkboxButton2 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
checked2 = YES;
NSLog(@"button 2");
}
else if (checked2) {
[checkboxButton2 setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
checked2 = NO;
}
}
- (IBAction)checkButton3:(id)sender {
if (!checked3) {
[checkboxButton3 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
checked3 = YES;
NSLog(@"button 3");
}
else if (checked3) {
[checkboxButton3 setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
checked3 = NO;
}
}
您可以为所有20个按钮提供一种操作方法。在Storyboard中,可以为每个按钮提供标记 你可以这样做:
-(IBAction)actionMethod:(id)sender{
UIButton *btn=(UIButton *)sender;
if(btn.tag==1){
[self toggleImageForButton:btn];
//execute button 1 other action
}
if(btn.tag==2){// execute button 2 action}
.....
if(btn.tag==20){// execute button 20 action}
}
-(void)toggleImageForButton:(UIButton *)btn{
if (btn.selected) {
[btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
}
else {
[btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
}
}
您还可以使用按钮标题而不是标记进行比较
将所有20个按钮连接到此方法
您可以查看IBOutletCollection,将所有20个按钮声明为一个数组,然后修改IBOutletCollection属性
@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *buttons;
稍后,您可以访问按钮属性,如:
for (UIButton *btn in buttons) {
//access btn properties
}
请注意,outlet集合的顺序与Interface Builder中建立连接的顺序大致相同 拍摄3个按钮,拍摄2个图像-假设一个已选中,另一个未选中 现在转到序列图像板中的属性检查器(右上角的第二个选项),在序列图像板中选择按钮(任意一个)后,找到显示“选定图像”“取消选定图像”的位置 将选中的图像作为选中的图像,将未选中的图像作为未选中的图像,并将未选中的图像作为默认图像 分别为三个按钮设置标签1、2、3 现在来看一些代码 编写一个IBAction方法,并将所有三个按钮的操作连接到该方法
-(IBAction)actionMethodButton:(id)sender{
UIButton *btn = (UIButton *)sender;
[self swapImagesOfButtons:btn];
switch(btn.tag){
case: 1{
//Button 1;
}
break;
case : 2 {
//Button 2;
}
break;
case : 3{
//Button 3;
}
break;
default :{
}
break;
}
}
编写另一个方法来交换图像---
=>您可以使用按钮标签,使用下面的代码作为实现选中和未选中的方式,如下图所示,尝试一下: 您不需要对UIButton类进行子类化。通过设计,Objective-C更倾向于组合而不是继承 UIButton是UIControl的一个子类,具有选定的属性。您可以使用此属性切换复选框的开/关行为,就像UISwitch一样 您可以将操作附加到按钮的内部事件,并在其中执行切换,如下所示: [myCheckBoxButton设置图像:状态的非检查图像:UIControlStateSelected]; [myCheckBoxButton设置图像:状态的非检查图像:UIControlStateNormal]
- (无效)myCheckboxToggle:(id)发件人 { myCheckboxButton.selected=!myCheckboxButton.selected;//切换所选属性,只是一个简单的BOOL }
-(void)swapImagesOfButtons:(UIButton *)btn{
if(btn.selected ){
[btn setSelected : NO]; // if button is selected, you are deselecting it.
}
else {
[btn setSelected : YES];
}
}