制作UIButton复选框的最佳方法是什么?

问题描述:

我想为标题和图像的UIButton我的iPhone应用程序制作标准复选框。按钮图像在“未选中”图像和“已选中”图像之间切换。制作UIButton复选框的最佳方法是什么?

起初我尝试继承UIButton,但UIButton没有-init***方法用于我的-init方法。

这样做的最好方法是什么?

在此先感谢。

您应该不需要继承UIButton类。通过设计,Objective-C支持合成而不是继承。

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

您可以附加到按钮的行动感动了内部事件,并在那里进行来回切换,这样的事情:

// when you setup your button, set an image for the selected and normal states 
[myCheckBoxButton setImage:checkedImage forState:UIControlStateSelected]; 
[myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateNormal]; 

- (void)myCheckboxToggle:(id)sender 
{ 
    myCheckboxButton.selected = !myCheckboxButton.selected; // toggle the selected property, just a simple BOOL 
} 
+1

你也可以用一行来做这件事。 'myCheckboxButton.selected =!myCheckboxButton.selected' – Diziet 2012-11-01 12:17:53

+4

你可以通过设置按钮状态的图像来避开if-else UIControlStateSelected;) – Climbatize 2013-05-22 07:52:38

你是否尝试覆盖initWithCoder方法,以防万一它以某种方式从一个nib加载?

+2

真的没有答案。 – 2014-07-03 12:47:03

设置的按钮图像:

[button setImage:uncheckedImage forState:UIControlStateNormal] 
[button setImage:checkedImage forState:UIControlStateSelected] 

现在所有你需要做的是:

button.selected = state 

和正确的图像将显示。

+0

有用的答案... – Biranchi 2013-08-20 09:49:17

您需要做的就是为状态UIControlStateNormalUIControlStateSelected设置2个不同的图像,然后在您的选择器中更改该按钮的selected属性。

这里是工作示例(换成你自己的图片名称):

- (void)loadView { 
    // ... 
    UIButton *chkBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [chkBtn setFrame:CGRectMake(0, 0, 300, 25)]; 

    [chkBtn setImage:[UIImage imageNamed:@"UNCHECKED.png"] 
      forState:UIControlStateNormal]; 
    [chkBtn setImage:[UIImage imageNamed:@"CHECKED.png"] 
      forState:UIControlStateSelected]; 

    [chkBtn addTarget:self 
       action:@selector(chkBtnHandler:) 
    forControlEvents:UIControlEventTouchUpInside]; 

    // Optional title change for checked/unchecked 
    [chkBtn setTitle:@"I am NOT checked!" 
      forState:UIControlStateNormal]; 
    [chkBtn setTitle:@"I am checked!" 
      forState:UIControlStateSelected]; 

    [self.view addSubview:chkBtn]; 
    [chkBtn release], chkBtn = nil; 
    // ... 
} 

- (void)chkBtnHandler:(UIButton *)sender { 
    // If checked, uncheck and visa versa 
    [sender setSelected:!sender isSelected]; 
} 

任何有兴趣在未来的 - 而不是做自己刚刚从GitHub下载下面的链接,它已经从子类UIControl已经成为一个复选框,并且功能完美。此外,还包括它是多么容易使用的示例项目:

https://github.com/Brayden/UICheckbox

我已经在我的项目之一使用M13Checkbox。工作正常。

https://github.com/Marxon13/M13Checkbox

UIImage* nonCheckedImage=[UIImage imageNamed:@"ic_check_box_outline_blank_grey600_48dp.png"];//[UIImage init 
    UIImage* CheckedImage=[UIImage imageNamed:@"ic_check_box_black_48dp.png"];//[UIImage init 

    //ic_check_box_black_48dp.png 
    [_checkBox setImage:CheckedImage forState:UIControlStateSelected]; 
    [_checkBox setImage:nonCheckedImage forState:UIControlStateNormal]; 
} 

- (IBAction)checkBoxToggle:(id)sender { 
    _checkBox.selected = !_checkBox.selected; // toggle the selected property, just a simple BOOL 

} 

的图像,你可以使用谷歌图标

试试这个: -

-(IBAction)clickCheckButton:(UIButton *)sender { 

    if (sender.tag==0) { 

    sender.tag = 1; 

    [sender setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 

    }else 

    { 

    sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; } } sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 

    } 
} 
+0

他不想试试它? – chouaib 2014-12-18 07:33:28

+0

你的意思是?我不理解 ? – King 2014-12-18 07:44:24

+0

我的意思是人不总是想尝试没有解释的东西 – chouaib 2014-12-18 08:49:38

为什么不使用一个开关 - UISwitch?这用于显示一个显示值的布尔状态的元素。