我似乎无法弄清楚如何做到这一点希望有人在这里可以帮助我。在我的tableview中,我想为每个单元格添加复选框,如果您触摸该复选框,则会出现一个复选标记,并且应该执行特定操作。但如果你只是触摸细胞,则应该发生不同的动作。有谁知道怎么做?我开始做以下事情。但我认为我的方法会造成内存泄漏,我不知道如何只针对所有按下的按钮执行操作..... 如果有人可以帮助我,那就太好了....
- (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];
}
NSArray *tempArray = [[exerciseNames objectAtIndex:indexPath.section] objectForKey:@"rowValues"];
UIButton *checkButton = [UIButton buttonWithType:UIButtonTypeCustom];
checkButton.tag = indexPath.row;
[checkButton setFrame:CGRectMake(10, 10, 23, 23)];
if (checkButtonPressed == YES) {
[checkButton setBackgroundImage:[[UIImage imageNamed:@"checked.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
}
else {
[checkButton setBackgroundImage:[[UIImage imageNamed:@"unchecked.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
}
[checkButton addTarget:self action:@selector(checkAction) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:checkButton];
cell.imageView.image = [UIImage imageNamed:@"unchecked.png"];
cell.textLabel.adjustsFontSizeToFitWidth = YES;
cell.textLabel.text = [NSString stringWithFormat:@"%@ (%@)", [[tempArray objectAtIndex:indexPath.row] objectForKey:@"full"], [[tempArray objectAtIndex:indexPath.row] objectForKey:@"short"]];
// Set up the cell...
return cell;
}
答案 0 :(得分:3)
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"CellWithSwitch"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellWithSwitch"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
cell.textLabel.text = @"Sound Effects";
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)path {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
} else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
答案 1 :(得分:1)
我会尝试子类化UITableViewCell并使每个单元格成为按钮操作的目标。这样,当按下按钮时,事件将由单元对象处理,而不是表控制器。如果您不喜欢,可以尝试使用分配给按钮的标签进行区分。为此,请将按钮选择器设为
checkAction:(UIButton *)_btn {}
当你添加目标时,
[checkButton addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside];
(注意:@selector()的末尾)
我没有尝试过第二种方式,但我认为它会起作用。
答案 2 :(得分:-1)
在Cocoa Touch中,UISwitch是UI范例,相当于桌面UI上的复选框。
您的checkAction处理程序可以检查哪个控件调用它,并且只更改那个控件。