iphone:如何将复选框添加到uitableviewcell?

时间:2010-10-08 23:02:27

标签: iphone objective-c uitableview uibutton

我似乎无法弄清楚如何做到这一点希望有人在这里可以帮助我。在我的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;
}

3 个答案:

答案 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处理程序可以检查哪个控件调用它,并且只更改那个控件。