Обновление imageView на UIButton в UITableViewCell - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть пользовательский UITableViewCells (созданный в конструкторе интерфейсов), который используется для статического UITableView, который в качестве аргумента я назову AddUserTableViewController (т.е. я не использую автоматически выпущенные ячейки как У меня только 5 рядов).

В верхнюю ячейку (используется для имени пользователя ) я вставил UIButton, который я использую для открытия UIActionSheet, что, в свою очередь, позволяет UIImagePicker установить изображение на UIButton (то есть [button.imageView.image = imageFromImagePicker]). Кнопка имеет изображение по умолчанию (добавлено в IB) с надписью «добавить изображение».

Изображение на кнопке устанавливается без проблем и остается на месте, даже когда я перехожу на страницу сведений о любой из ячеек таблицы, за исключением ячейки имя пользователя , в которой находится кнопка. Когда я выбираю эту ячейку, изображение исчезает и не появляется снова, когда я возвращаюсь обратно к AddUserTableViewController из подробного представления «Добавить имя». Отображается изображение по умолчанию «add image», упомянутое выше.

Я перепробовал много стратегий, среди которых:

1) с использованием [self.tableView reloadData], [button.imageView setNeedsDisplay], [self.view setNeedsDisplay] в методе viewWillAppear;

2) с использованием вышеуказанных методов в методе cellForRowAtIndexPath;

3) с использованием вышеуказанных методов в переопределенном методе willDisplayCell:forRowAtIndexPath:;

Когда я помещаю отладочные операторы NSLog в программу, я вижу, что свойство button.imageView.image по-прежнему установлено на изображение, выбранное с помощью UIImagePicker, но оно не отображается (отображается изображение по умолчанию из пера).

Как я упоминал выше, это происходит только в том случае, если я ухожу от AddUserTableViewController , выбрав UITableViewCell, в который встроен UIButton.

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

Я добавил фрагмент кода из метода cellForRowAtIndexPath: только для иллюстрации -

//populates the personal info section
if (section == kPersonalInfoAddSection) {

    //Covers the add image button and the name adding field
    if (row == kNameRow) {


        UILabel *nameLabel = (UILabel *)[nameCell viewWithTag:kMainTextTag];
        UILabel *reqLabel = (UILabel *) [nameCell viewWithTag:kSubTextTag];
        //UIButton *imageButton = (UIButton *) [nameCell viewWithTag:kImageTag];

        if (mainUser.imagePath != nil) {

            UIImage *img = [UIImage imageWithContentsOfFile:mainUserImagePath];
            imageButton.imageView.image = img;
            [imageButton.imageView setNeedsDisplay];
            //[imageButton setNeedsDisplay];
            //[nameCell setNeedsDisplay];
            NSLog(@"************************** Added the BESPOKE image (%@)to the image button", img);
        }
        else {
            NSLog(@"************************** Added the DEFAULT image (%@)to the image button", addUserImage);
            imageButton.imageView.image = addUserImage;
        }


        UIColor *blackText = [[UIColor alloc] initWithWhite:0 alpha:1];


        NSString *firstName;

        if (mainUser.firstName){

            nameLabel.textColor = blackText;
            firstName = mainUser.firstName;

        }
        else {

            nameLabel.textColor = reqLabel.textColor;
            firstName = NAME_STRING;
        }

        NSString *lastName = (mainUser.lastName)? mainUser.lastName : EMPTY_STRING;


        NSString *name = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];

        nameLabel.text = name;
        reqLabel.text = REQUIRED_STRING;

        [blackText release];

        return nameCell;

    }

1 Ответ

0 голосов
/ 17 февраля 2010

В cellForRowAtIndexPath вы делаете что-то, что могло бы «сбрасывать» изображение?

...