iphone: как добавить флажки в uitableviewcell? - PullRequest
1 голос
/ 09 октября 2010

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

- (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 ]

3 голосов
/ 05 сентября 2011
 - (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 голос
/ 12 апреля 2011

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

checkAction:(UIButton *)_btn {}

и при добавлении цели

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

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

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

0 голосов
/ 09 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...