Как правильно использовать ячейки в Objective c?
У меня большая проблема с моим UITableViewCell. Я использую раскадровку, и у меня есть пользовательская ячейка в моем UITableVIew. Я добавляю Идентификатор к этому, и мой код класса:
static NSString *celldentifier = @"myCellId";
CustomCell *myCell = [tableView dequeueReusableCellWithIdentifier:celldentifier];
if (celldentifier == nil) {
celldentifier = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
}
...
Редактировать:
...
myCell.myButton.hidden = YES;
...
Когда я загружаю другую информацию в ячейку и мне нужно скрыть кнопку, я делаю таблицу перезагрузки:
[self.myTable reloadData];
И в моем viewController я перезагружаю этот tableView, показывая или скрывая некоторые компоненты в моей ячейке, например, UIButton. Но когда я делаю прокрутку, эти добавленные кнопки исчезают..
Что не так в моем коде? Как я мог решить эту проблему?
4 ответа
Проблема в том, что ячейки используются повторно... если у вас есть оператор if для внесения изменений... убедитесь, что вы поставили else, чтобы отменить его
if(isReady){
myCell.myButton.hidden = YES;
}
else {
myCell.myButton.hidden = NO;
}
У меня была такая же проблема, и вы должны добавить myCell.myButton.hidden = NO;
этот код раньше myCell.myButton.hidden = YES;
Как это:
static NSString *simpleTableIdentifier = @"myCellId";
CustomCell * myCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (myCell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
myCell = [nib objectAtIndex:0];
}
myCell.myButton.hidden = NO;
if(isReady){
myCell.myButton.hidden = YES;
}
static NSString *celldentifier = @"myCellId";
CustomCell *myCell = [tableView dequeueReusableCellWithIdentifier:celldentifier];
if (!myCell) {
myCell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
}
myCell.myButton.hidden = YES;
Это плохая идея использовать его из cellForRowAtIndexPath
метод.
Вы должны создать модель для ячейки и оставить там все свойства для ячейки.
if (myCell == nil) {
myCell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
//I think it should be but don't shure
//[tableView registerClass:<#(nullable Class)#> forCellReuseIdentifier:<#(nonnull NSString *)#>];
}