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

cdu*_*uck 11 iphone checkbox objective-c uibutton

我正在尝试UIButton使用标题和图像为我的iPhone应用程序制作一个标准复选框.按钮图像在"未选中"图像和"已检查"图像之间变化.

起初我尝试了子类化,UIButtonUIButton没有-init***方法可以在我的-init方法中使用.

做这个的最好方式是什么?

提前致谢.

Jas*_*ien 42

您不应该为UIButton该类创建子类.通过设计,Objective-C有利于组合而不是继承.

UIButton是一个子类UIControl,它有一个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
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过为按钮状态UIControlStateSelected设置图像来避免if-else;) (4认同)

emp*_*emp 7

在按钮中设置图像:

[button setImage:uncheckedImage forState:UIControlStateNormal]
[button setImage:checkedImage forState:UIControlStateSelected]
Run Code Online (Sandbox Code Playgroud)

现在你需要做的就是:

button.selected = state
Run Code Online (Sandbox Code Playgroud)

并显示正确的图像.


cho*_*own 5

所有你需要做的是设置2幅不同的图像的状态UIControlStateNormalUIControlStateSelected,然后在你的选择,改变了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];
}
Run Code Online (Sandbox Code Playgroud)