Обновление текста для UIButton из UIActionSheet - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть UIButton в моем UITableViewCell.Эта кнопка запускает UIActionSheet, поэтому, когда пользователь рисует кнопку на листе действий, я хочу, чтобы текст кнопки изменился на этот текст.

Я показываю кнопку со следующим кодом.Я думаю, что если я вызову 'tableView reload' в actionSheet: clickedButtonAtIndex:, это будет работать, но есть ли лучшая альтернатива, чтобы просто обновить statusButton?

SmokingStatusTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.statusButton.titleLabel.text = [self.vitalsDictionary objectForKey:@"smoking_status_display"];


- (IBAction)smokingStatusButtonClicked:(id)sender{
    UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"Smoking Status" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"1 Current everday smoker", @"2 Current some day smoker", nil];
    self.smokingStatusActionSheet = actionSheet;
    [self.smokingStatusActionSheet showInView:self.view];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{    
    if (actionSheet == self.smokingStatusActionSheet){
        switch (buttonIndex) {
            case 0:
                [self.vitalsDictionary setObject:@"daily_smoker" forKey:@"smoking_status"];
                break;
            case 1:
                [self.vitalsDictionary setObject:@"nondaily_smoker" forKey:@"smoking_status"];
                break;
            default:
                break;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

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

Если ячейка отключена от экрана, она должна автоматически обновляться в вашей реализации tableView:cellForRowAtIndexPath:, когда она снова станет видимой.

Если вы хотите принудительно обновить ее, и она видна вамможно:

  1. Звонить reloadData

  2. Звонить reloadRowsAtIndexPaths:withRowAnimation:

  3. Звонить cellForRowAtIndexPath:и настройте его.

Для 2 + 3 вам нужно будет сохранить ссылку на indexPath ячейки, которая вызвала лист действий.

Если вы выберете 3, томожет помочь настроить ваш метод tableView:cellForRowAtIndexPath: следующим образом:

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

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
{
    //..configure label etc here
}

Выделив configureCell:atIndexPath:, вы можете использовать тот же код для настройки ячейки.

Например, вы можете позвонить

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{    
    if (actionSheet == self.smokingStatusActionSheet){
        switch (buttonIndex) {
            case 0:
                [self.vitalsDictionary setObject:@"daily_smoker" forKey:@"smoking_status"];
                break;
            case 1:
                [self.vitalsDictionary setObject:@"nondaily_smoker" forKey:@"smoking_status"];
                break;
            default:
                break;
        }
    }

    NSIndexPath *indexPath = self.selectIndex;
    UITableViewCell *cell = [self.tableView cellForRowAtPath:indexPath];
    [self configureCell:cell atIndexPath:indexPath];
}
0 голосов
/ 08 декабря 2011

Вы можете вызвать -reloadRowsAtIndexPaths: withRowAnimation: для таблицы или просто получить ссылку на ячейку напрямую (- [UITableView cellForRowAtIndexPath:]) и установить текст кнопки.

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