У меня есть пользовательский 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;
}