iphone: как добавить флажки в uitableviewcell?

Я просто не могу понять, как это сделать, надеюсь, кто-то здесь может мне помочь. В моем табличном представлении я хочу добавить флажки в каждую ячейку, и если вы коснетесь флажка, появится галочка, и должно произойти определенное действие. но если вы просто коснетесь ячейки, должно произойти другое действие. Кто-нибудь знает, как это сделать?? Я начал делать следующее. Но я думаю, что мой подход создает утечки памяти, и я не знаю, как выполнить действие только для нажатой кнопки, а не для всех них..... Было бы здорово, если бы кто-нибудь мог мне помочь....

- (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;
}

person Christoph v    schedule 08.10.2010    source источник


Ответы (3)


Я бы попробовал создать подкласс UITableViewCell и сделать каждую ячейку целью действия кнопок. Таким образом, при нажатии кнопки событие будет обрабатываться объектом ячейки, а не контроллером таблицы. Если вам это не нравится, вы можете попробовать использовать тег, который вы назначаете кнопке, чтобы сделать различие. Для этого сделайте селектор кнопок

checkAction:(UIButton *)_btn {}

и когда вы добавляете цель,

[checkButton addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside];

(обратите внимание на : в конце @selector())

Второй способ не пробовал, но думаю сработает.

person Mike    schedule 12.04.2011

В Cocoa Touch UISwitch является парадигмой пользовательского интерфейса, эквивалентной флажку в настольном пользовательском интерфейсе.

Ваш обработчик checkAction может проверить, какой элемент управления вызвал его, и изменить только этот элемент управления.

person hotpaw2    schedule 08.10.2010

person    schedule
comment
вопрос просит добавить флажок в ячейке таблицы, не добавленный в UITableViewCellAccessoryCheckmark - person NANNAV; 03.10.2012