Как правильно использовать ячейки в 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 *)#>];
}
Другие вопросы по тегам