Как правильно добавить / удалить кнопку на правой стороне ячейки?
Как добавить условие проверки каталога в каждую ячейку, а затем отобразить один из двух типов ячеек?
В моем случае: ViewWillAppear загружает XML с именами каталогов и загружает его в TableView. Каждая ячейка проверяет, существует ли каталог на телефоне. Если это так, то ячейка без кнопки (выкл.), Если нет, ячейка получает кнопку (вкл.). Также ImageViews разные.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [uitableview dequeueReusableCellWithIdentifier:CellIdentifier];
SomeClass *k = (SomeClass*)[self.arr_SomeClass objectAtIndex:indexPath.row];
NSString *checkThisDir = [documents_dir stringByAppendingPathComponent:[k.dir_name stringByDeletingPathExtension]];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.imageView.tag = 121;
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
if (![[NSFileManager defaultManager] fileExistsAtPath:dir_name isDirectory:nil]) {
cell.imageView.image = [UIImage imageNamed:@"icon_on.png"];
UIButton *bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
bt.contentMode = UIViewContentModeScaleAspectFit;
bt.tag = 123;
UIImage *imgDownload = [UIImage imageNamed:@"icon_button.png"];
[bt setImage:imgDownload forState:UIControlStateNormal];
[bt setImage:imgDownload forState:UIControlStateHighlighted];
[bt setImageEdgeInsets:UIEdgeInsetsMake(4,3,2,3)];
[bt setFrame:CGRectMake(282,5,34,34)];
[bt addTarget:self action:@selector(listButtonClick:event:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:bt];
UIView *empty = [UIView new]; // makes space for button
cell.accessoryView = empty;
[empty release];
}
else {
// or: cell.imageView.image = [UIImage imageNamed:@"icon_off.png"];
UIButton *bt = (UIButton*)[cell viewWithTag:123];
[bt removeFromSuperview];
UIImageView *iv = (UIImageView*)[cell viewWithTag:121];
iv.image = [UIImage imageNamed:@"icon_off.png"];
}
cell.detailTextLabel.text = k.details;
cell.textLabel.text = k.name;
return cell;
}
listButtonClicked
просто загружает файл и создает каталог, а затем выполняет reloadData
и reloadRowsAtIndexPaths
в TableView.
Проблема в том, что когда я прокручиваю список высоко или достаточно низко, иногда в ячейки добавляются кнопки, которые не должны иметь их.
Любая помощь была бы хороша, заранее спасибо!
.
РЕШИТЬ:
Перенесено создание кнопки в if (cell==nil) { .. }
и добавлено извне:
UIButton *bt = (UIButton*)[cell viewWithTag:123];
if (![[NSFileManager defaultManager] fileExistsAtPath:albumDir isDirectory:nil]) {
cell.imageView.image = [UIImage imageNamed:@"icon_on.png"];
[bt setHidden:NO];
}
else {
cell.imageView.image = [UIImage imageNamed:@"icon_off.png"];
[bt setHidden:YES];
}