установить текст uilabel, добавленный в ячейку uitableview

#ios #objective-c #uitableview #uibutton #uilabel

#iOS #objective-c #uitableview #uibutton #uilabel

Вопрос:

В каждой ячейке uitableview есть кнопка и uilabel, например, следующий код

 ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[ListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


[cell.UIButton addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
cell.UIButton.tag = indexPath.row;
cell.UILabel.text = @"0";
  

Я хочу, чтобы при нажатии на кнопку uilabel.text в той же ячейке, что и uibutton, добавлялся один, я нажимаю снова, uilabel.text добавлял еще один, что-то вроде vote.

 - (IBAction)ButtonClicked:(UIButton *)sender
{
  NSInteger selectedRow = sender.tag;
}
  

итак, как я могу изменить текст uilabel? Спасибо.

Комментарии:

1. Пожалуйста, прочитайте developer.apple.com/library/mac/documentation/Cocoa/Conceptual /… и переименуйте ваши переменные и методы соответствующим образом, чтобы нам было проще помочь вам решить вашу проблему.

2. @duci9y спасибо за ваше предложение.

Ответ №1:

  1. Почему вы жестко кодируете строку @"0" в качестве текста метки? Если ваша цель — отслеживать голоса, вам необходимо отслеживать текущий подсчет голосов в некоторой структуре данных. Затем вы настраиваете каждую ячейку на основе фактического значения из данных. Затем эти данные могут обновляться по мере нажатия кнопок.
  2. Установка тега кнопки на indexPath.row вызовет множество проблем, если строки можно добавлять, удалять или перемещать. Есть гораздо лучший способ получить ячейку с помощью кнопки без необходимости возиться с тегами.

Далее предполагается, что в вашем классе есть NSMutableArray ivar ( _votes ), который служит источником данных для подсчета голосов.

Теперь ваш cellForRowAtIndexPath становится:

 ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[ListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    [cell.UIButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
}

NSNumber *votes = _votes[indexPath.row];    
cell.UILabel.text = [NSString stringWithFormat:@"%@", votes];
  

Действие вашей кнопки становится:

 - (void)buttonClicked:(UIButton *)button {
    CGPoint pointInTable = [button convertPoint:CGPointMake(5, 5) toView:self.tableView];
    NSIndexPath *path = [self.table indexPathForRowAtPoint:pointInTable];

    NSNumber *oldVote = _votes[path.row];
    NSNumber *newVote = @([oldVote intValue]   1);
    _votes[path.row] = newVote;

    [self.tableView reloadRowsAtIndexPaths:@[ path ] withRowAnimation: UITableViewRowAnimationFade];
}
  

Комментарии:

1. спасибо, я обновил свой код и решил эту проблему.