Sou*_*ker 1 cocoa-touch objective-c uibutton uiimageview ios
我想知道如何将切换功能添加到a UIButton,就像用户点击一个未选中的按钮一样,按钮被选中并保持选中状态,直到用户再次点击它为止,就像之前一样.
我正在考虑制作一个IBAction将其从未选中更改为选中的,我该怎么做?
继承人我试过的:
-(IBAction)toggle {
//Toggle on implementation.
button.selected = YES;
button.highlighted = NO;
button.enabled = YES;
//Toggle off implementation.
if (button.highlighted == YES) {
button.selected = NO;
button.highlighted = YES;
button.enabled = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
问题...
-(IBAction)toggleFav {
if (favButton == nil) {
UIImage *unselectedImage = [UIImage imageNamed:@"favUntapped.png"];
UIImage *selectedImage = [UIImage imageNamed:@"favTapped.png"];
[favButton setImage:unselectedImage forState:UIControlStateNormal];
[favButton setImage:selectedImage forState:UIControlStateSelected];
[favButton setFrame:CGRectMake(0, 0, 40, 40)];
}
if([favButton isSelected]){
//Add to menu.
[favButton setSelected:NO];
} else {
//Remove from menu.
[favButton setSelected:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*ica 11
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UIImage *unselectedImage = [UIImage imageNamed:@"unselected.png"];
UIImage *selectedImage = [UIImage imageNamed:@"selected.png"];
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setBackgroundImage:unselectedImage forState:UIControlStateNormal];
[b setBackgroundImage:selectedImage forState:UIControlStateSelected];
[b addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[b setFrame:CGRectMake(0, 0, 40, 40)];
[cell.contentView addSubview:b];
}
return cell;
}
-(void) buttonPressed:(UIButton *)sender
{
if([sender isSelected]){
//...
[sender setSelected:NO];
} else {
//...
[sender setSelected:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
您的toggleFav代码没有多大意义.
if (favButton == nil) {检查,如果favButton存在.但是如果你将它与IB连接起来,它应该始终存在于那里.如果不是,那么按钮如何调用此方法?所以这样做:
-(void)viewDidLoad
{
//....
UIImage *unselectedImage = [UIImage imageNamed:@"favUntapped.png"];
UIImage *selectedImage = [UIImage imageNamed:@"favTapped.png"];
[favButton setImage:unselectedImage forState:UIControlStateNormal];
[favButton setImage:selectedImage forState:UIControlStateSelected];
[favButton setFrame:CGRectMake(0, 0, 40, 40)];
//....
}
-(IBAction)toggleFav:(UIButton *)sender {
if([sender isSelected]){
//...
[sender setSelected:NO];
} else {
//...
[sender setSelected:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
在这里,您将找到一个带有DetaiView的示例项目,它包含一个具有2个状态的Button.
注意:我正在保存NSUserDefaults中选择的按钮的信息.你不应该这样做.相反,您需要将其保存在模型中.但由于我没有关于你的模型的信息,我只是使用NSUserDefaults.