справка по button.tag = indexPath.row - PullRequest
       1

справка по button.tag = indexPath.row

3 голосов
/ 17 сентября 2010

У меня есть этот код на моем 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]);

}

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

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

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

[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)
    {
     ...
    }
}

подробнее здесь Определение того, какойКнопка UIB была нажата в UITableView

1 голос
/ 22 июля 2011

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

Это моя кнопка в представлении содержимого моей ячейки.Примечание: кнопка должна быть подпредставлением 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);

}

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

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