У меня есть tableview с tableviewcell, установленным на Custom в раскадровке. У меня есть 1 кнопка справа от каждой ячейки (кнопка в ячейке).
при загрузке каждой ячейки, в зависимости от условия, эта кнопка должна показывать или скрывать. Но это не работает, как ожидалось. Когда я прокручиваю вниз и снова прокручиваю вверх, теперь отображаются кнопки, которые ранее были скрыты (с правильным условием).
Я делаю то же самое с изображением в ячейке, и изображение загружается правильно даже при прокрутке.
Вот мой код
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIButton *btnCall = (UIButton *) [cell viewWithTag:5];
UIImageView *imgIcon = (UIImageView *) [cell viewWithTag:6];
[btnCall setHidden:TRUE];
if (... some condition ...) {
[btnCall setHidden:false];
[imgIcon setImage:[UIImage imageNamed:@"icon1.png"]]; // load correctly
} else {
[btnCall setHidden:true]; // doesn't seem to work consistently.
[imgIcon setImage:[UIImage imageNamed:@"icon2.png"]]; // load correctly
}
return cell;
}
В моей раскадровке эта кнопка в ячейке прототипа также скрыта.
Я прочитал много вопросов и ответов по этому вопросу.
- во-первых, это подпредставление UIButton в UITableViewCell не скрывает, как ожидалось. Но у меня уже есть пользовательская ячейка (установленная в раскадровке).
- еще один: iPhone TableViewCell - добавление и удаление кнопки с условием . Но для этого нужно создать кнопку в блоке if (cell == nil), которую я не использую. Потому что, если я использую, все остальные мои вещи (метки, изображения, которые добавляются в пользовательскую ячейку через раскадровку) не отображаются. И я действительно хочу использовать раскадровку вместо того, чтобы программно добавлять элементы через блок «if (cell == nil)».
- и другие... но пока никто не работал.
У меня также есть другие вещи, такие как изображение в каждой ячейке. И изображения загружаются правильно, даже при прокрутке вверх/вниз.
Может кто-нибудь помочь, пожалуйста? Большое спасибо!
**** РЕДАКТИРОВАТЬ 1 -- ПРОБЛЕМА РЕШЕНА!!! ****
Я подклассифицирую свою ячейку, чтобы мой сброс мог быть более правильным. Вот как это делается (вместо этого я заменяю кнопку выше изображением — оставьте его, поскольку кнопка тоже должна работать нормально):
@implementation PSCellMyTableViewCell
@synthesize imgView1 = _imgView1, imgView2 = _imgView2;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.imgView1.image = nil;
self.imgView2.image = nil;
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
Код для ячейкиForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell1";
PSCellMyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (... some condition ...) {
[cell.imgView1 setImage:[UIImage imageNamed:@"icon-1.png"]];// no longer using tag
[cell.imgView2 setImage:[UIImage imageNamed:@"icon-12.png"]]; // no longer using tag
} else {
[cell.imgView1 setImage:[UIImage imageNamed:@"icon-2.png"]];// no tag
[cell.imgView2 setImage:[UIImage imageNamed:@"icon-22.png"]]; // no tag
}
return cell;
}