Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Christoph vОтветов: 2

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

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

iphoneobjective-cuitableviewuibutton

Ответы

Ответ 1 · рейтинг 1 · Mike

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

checkAction:(UIButton *)_btn {}

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

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

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

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

Ответ 2 · рейтинг -1 · hotpaw2

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы