У меня возникла проблема с UITableView и, точнее, с пользовательской ячейкой.Элементы, исчезающие из UITableViewCell при прокрутке
У меня есть контроллер табличного представления, скажем ControllerA, который отвечает за отображение разных TableViewCells. Эти ячейки являются пользовательскими ячейками, определенными в другом классе, скажем, ControllerCell. Каждая ячейка содержит одну из этих информационных кнопок (маленькую, круглую с «i»). Эти кнопки отображаются только тогда, когда есть что показать.
В ControllerCell, я определяю, что будет дальше:
@property (nonatomic, retain) IBOutlet UIButton *infoButton;
@property (nonatomic, retain) IBOutlet UIAlertView *alert;
@property (nonatomic, retain) IBOutlet NSString *info;
- (IBAction)infoSupButton:(id)sender;
, а также @synthesis, так же, как и все сделает. Тогда я определить, что будет происходить с предупреждением:
- (IBAction)infoSupButton:(id)sender {
alert = [[UIAlertView alloc] initWithTitle:@"Informations supplémentaires"
message:info
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
if (info != nil) {
[alert show];
}
}
А в разделе «initWithStyle», я
[_infoButton addTarget:self action:@selector(infoSupButton:) forControlEvents:UIControlEventTouchUpInside];
Это было для объявления ячейки.
Теперь давайте сосредоточимся на ControllerA.
Я разбираю XML-файл, чтобы получить данные «info», которые должны отображаться, когда вы нажимаете «infoButton». Это не проблема, потому что я могу получить эти данные и показать их в консоли.
После того как данные разбирается, я заполнить NSMutableArray, в разделе viewDidLoad:
tableInfoSup = [[NSMutableArray alloc] init];
Затем следуют классические методы:
-numberOfSectionsInTableView: (3 секции) -numberOfRowsInSection: (8 строки в разделе 0, 4 в разделах 1 и 4 в разделе 2) -cellForRowAtIndexPath:
У меня есть 3 разных раздела, отображающих ячейки с различной информацией, а в cellForRowAtI Метод NDEX, я:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"ExerciceTableCell";
ControllerCell *cell = (ControllerCell *)[tableView dequeueReusableCellWithIdentifier:exerciceTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ExerciceTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
if (indexPath.section == 0) {
[...]
if ([[tableInfoSup objectAtIndex:indexPath.row] isEqualToString:@""]) {
[cell.infoButton setHidden:YES];
cell.info = nil;
}
else {
cell.info = [tableInfoSup objectAtIndex:indexPath.row];
}
}
if (indexPath.section == 1) {
[...]
if ([[tableInfoSup objectAtIndex:indexPath.row+8] isEqualToString:@""]) {
[cell.infoButton setHidden:YES];
cell.info = nil;
}
else {
cell.info = [tableInfoSup objectAtIndex:indexPath.row+8]; //got the 8 rows from section 0;
}
}
if (indexPath.section == 2) {
[...]
if ([[tableInfoSup objectAtIndex:indexPath.row+12] isEqualToString:@""]) {
[cell.infoButton setHidden:YES];
cell.info = nil;
}
else {
cell.info = [tableInfoSup objectAtIndex:indexPath.row+12]; //got the 8 rows from section 0, + 4 rows from section 1
}
}
return cell;
}
Теперь проблема заключается в том, что, когда на экране отображается на 1-е раз, все в Одере: Я получил клетку с маленькой кнопкой «я», показывая хорошую UIAlertView , некоторые другие ячейки не отображают кнопку ... Это нормально. Но после нескольких прокруток кнопки «i» начинают исчезать ... Я не знаю, почему.
Есть идеи? Спасибо :-)
ОК, я думал, что это что-то с этими скрытыми ячейками ... Какова наилучшая практика «показать» их? Я этого никогда не делал! – tvincent
Ну, в вашем случае, сделайте точно противоположное тому, что вы сделали, чтобы скрыть их: 'if (indexPath.section == someSectionWhereYouWantToShowInfo) {[cell.infoButton setHidden: NO]; cell.info = @ "Некоторая информация, которую вы хотите показать"; } ' – fzwo
Так вот что я делаю сейчас: if ([[tableInfoSup objectAtIndex: indexPath.row] isEqualToString: @" "]) { [cell.infoButton setHidden: YES]; cell.info = nil; } else { [cell.infoButton setHidden: NO]; cell.info = [tableInfoSup objectAtIndex: indexPath.row]; } – tvincent