Добавление значения cell.textLabel.text в массив и его отображение - PullRequest
0 голосов
/ 26 января 2012

У меня есть UItableView, и у меня есть две кнопки в каждой ячейке. Вы можете добавить или вычесть 1 из cell textLabel. Я добавляю текущее значение ячейки +1 с этим:

  - (IBAction)addLabelText:(id)sender{
     num = [NSString stringWithFormat:@"%d",[cell.textLabel.text intValue] +1];//<--- num is an NSNumber
     number = [[NSMutableArray alloc]initWithObjects:num, nil];//<---- number is an NSMutableArray
     [myTableView reloadData];

}

и я пытаюсь вычесть текст и сохранить его в массиве следующим образом:

    - (IBAction)subtractLabelText:(id)sender
{
        if ( [[cell.textLabel text] intValue] == 0){     


     num = [NSString stringWithFormat:@"%d",[num intValue] +0];
     [number addObject:num];
         [myTableView reloadData];

     }
     else{
     num = [NSString stringWithFormat:@"%d",[num intValue] -1];
     [number addObject:num];
     [myTableView reloadData];
     }
}

и я пытаюсь установить cell.textLabel.text в cellForRow следующим образом:

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

    cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
     {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];


     } 
    cell.textLabel.text = [number objectAtIndex:indexPath.row];//<---IM USING THIS LINE TO SET THE NEW TEXTLABEL
    cell.textLabel.text = @"1";


return cell;
}

МОЯ ПРОБЛЕМА

Итак, сложение работает, а вычитание - нет. Это не работает вообще, когда я нажимаю кнопку на ячейке. Заранее спасибо!!

1 Ответ

1 голос
/ 26 января 2012

С риском указать на очевидное ... вы, кажется, жестко закодировали свойство text в @ "1".

cell.textLabel.text = [number objectAtIndex:indexPath.row];//<---IM USING THIS LINE TO SET THE NEW TEXTLABEL
cell.textLabel.text = @"1";

Первая строка, вероятно, делает то, что вы думаете ..... но затем вы немедленно меняете его обратно на @ "1".

РЕДАКТИРОВАТЬ - Основываясь на пояснениях в комментариях, вот что, я думаю, вы хотите сделать.Я изменю ваш собственный код как опубликованный.

Обратите внимание, что я добавил свое добавление в viewDidLoad в качестве примера.Вы можете сделать это в init или любом другом месте, в любой момент, когда вы знаете, сколько ячеек вы хотите показать.

- (void)viewDidLoad {
    self.number = [[[NSMutableArray alloc] init] autorelease];
    for (int i = 0; i < [HOW MANY CELLS DO YOU WANT?]; i++) {
        [self.number addObject:@"1"];
    }

    [myTableView reloadData];
}

- (IBAction)addLabelText:(id)sender {
// Note that I'm assuming here that your button is a direct child of the cell.
// If not, you'll need to change this.
    UITableViewCell *cell = [sender superview];
    NSInteger newNumber = [cell.textLabel.text intValue] + 1;
    NSString *newNumberString = [NSString stringWithFormat:@"%d", newNumber];

    [self.number replaceObjectAtIndex:cell.tag withObject:newNumberString];

    [myTableView reloadData];
}

- (IBAction)subtractLabelText:(id)sender {
// Note that I'm assuming here that your button is a direct child of the cell.
// If not, you'll need to change this.
    UITableViewCell *cell = [sender superview];
    NSInteger newNumber = [cell.textLabel.text intValue] - 1;
    newNumber = (newNumber < 0) ? 0 : newNumber;

    NSString *newNumberString = [NSString stringWithFormat:@"%d", newNumber];

    [self.number replaceObjectAtIndex:cell.tag withObject:newNumberString];

    [myTableView reloadData];
}

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

    cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
    }

    cell.tag = indexPath.row; // Important for identifying the cell easily later
    cell.textLabel.text = [self.number objectAtIndex:indexPath.row];

    return cell;
}

Я не хочу углубляться в подробности, ноЯ бы порекомендовал вам взглянуть на перезагрузку только измененной ячейки , вместо того, чтобы каждый раз вызывать [myTableView reloadData].

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