带有复选框的iOS构建表单

时间:2016-03-10 17:00:03

标签: ios objective-c

我正在我的应用程序中构建一个带有复选框的表单,当然,XCode库实际上并不提供复选框作为表单选项(疯狂);所以我创建了带有类似复选框(已选中/未选中)的图像的按钮。

那就是说,我的表格很长,需要20多个复选框 - 如果我理解正确,每个复选框都必须单独“连线”; 例如我的屏幕上有三个复选框,请参阅下面的代码...我无法想象必须为20个复选框做所有这些(更不用说3个!) - 有更好的方法吗这个?非常感谢帮助/建议。

·H

@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;

    }

}

3 个答案:

答案 0 :(得分:0)

您可以为所有20个按钮设置一个操作方法。在storybaord中,您可以为每个按钮添加标签。

你可以这样做:

-(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
        }

请注意,出口集合的顺序大致与Interface Builder中建立连接的顺序大致相同。

答案 1 :(得分:0)

选择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;
      }
}

写另一种方法来交换图像---

   -(void)swapImagesOfButtons:(UIButton *)btn{

        if(btn.selected ){
             [btn setSelected : NO]; // if button is selected, you are deselecting it.
         }
         else {
             [btn setSelected : YES];
         }
     }

答案 2 :(得分:0)

=>您可以使用按钮标签,使用下面的代码轻松实现检查和取消选中,如下所示:

你不应该继承UIButton类的子类。通过设计,Objective-C有利于组合而不是继承。

UIButton是UIControl的子类,它具有selected属性。您可以使用此属性来切换复选框的开/关行为,就像UISwitch一样。

你可以将一个动作附加到按钮的内部事件中,并在那里执行切换,如下所示:

[myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateSelected]; [myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateNormal];

  • (无效)myCheckboxToggle:(ID)发送方 { myCheckboxButton.selected =!myCheckboxButton.selected; //切换所选属性,只是一个简单的BOOL }