Помощь по button.tag = indexPath.row

У меня есть этот код на моей cellForRowAtindexPath с пользовательской ячейкой и кнопкой в ​​каждой ячейке.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
 static NSString *MyIdentifier = @"tblCellView";

 TableCellView *cell = (TableCellView *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

 Alarms *alarma = (Alarms *)[alarmsArray objectAtIndex: indexPath.row];

 if (!cell) {
  [[NSBundle mainBundle] loadNibNamed:@"TableCellView" owner:self options:nil];
  cell = tblCell;

  UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(-7, 4, 30, 33)];

  [button addTarget:self action:@selector(favButtonAction:) forControlEvents:UIControlEventTouchUpInside];
  [button setTag:1];
  [cell.contentView addSubview:button];

  [button release];
 }

 // Set up the cell.
 [cell setLabelText:  [alarma nombreAlarma]];

 UIButton *button = (UIButton *)[cell viewWithTag:1];

 button.tag = indexPath.row;

 return cell;
}

Моя проблема в том, что когда я нажимаю на кнопку, я получаю случайные результаты, как только я перемещаюсь по таблице, а ячейки повторно используются, я получаю разные индексы, которые не равны методу tex для рассматриваемой ячейки.


-(IBAction)favButtonAction: (id)sender
{
 UIButton *button = (UIButton *)sender; 

 Alarms *alarma = (Alarms *)[alarmsArray objectAtIndex: button.tag];

 NSLog(@"labelText: %@",[alarma nombreAlarma]);

}

например, первая ячейка всегда в порядке, но последняя ячейка равна первому объектуAtIndex (возможно, button.tag равен 0, когда он должен быть 14?)

+2
17 сент. '10 в 10:53
источник поделиться
2 ответа

Не помещайте значение тега для кнопки внутри ячейки.

Это моя кнопка внутри представления содержимого моей ячейки. Примечание. Кнопка должна быть подчинена Contentview.

[cell1.YourButton addTarget:self action:@selector(OnClickCategory:) forControlEvents:UIControlEventTouchUpInside];

Действие для моей кнопки

- (void) OnClickCategory:(id) sender {

//NSIndexPath *indexPath =(NSIndexPath *)[sender tag];

UIView *senderButton = (UIView*) sender;
NSIndexPath *indexPath = [CategoryTable indexPathForCell: (UITableViewCell*)[[senderButton superview]superview]];

NSLog(@"%d",indexPath.row);

}

Это работает для меня.

+1
22 июл. '11 в 5:13
источник

Хорошо. Я нашел решение, это другой подход, но он работает:

[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];

а затем на обработчике кнопок:

- (void)checkButtonTapped:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
    if (indexPath != nil)
    {
     ...
    }
}

подробнее здесь Обнаружение, которое UIButton было нажато в UITableView

+2
17 сент. '10 в 12:18
источник

Посмотрите другие вопросы по меткам или Задайте вопрос