Программное создание пользовательских ячеек в цели c? - PullRequest
0 голосов
/ 22 мая 2018

У меня проблемы с отображением таможенных ячеек.Ниже я опубликовал упрощенную версию моего кода:

 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    NSLog(@"Being Called?");
    //reuseID = @"newtableid";
    self.backgroundColor = [UIColor redColor];

    self.name = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 50)];
    self.name.backgroundColor = [UIColor redColor];

    [self addSubview:self.name];

    return self;
}

В моем viewController я настроил tableView в методе ViewDidLoad:

 self.table = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 400) style:UITableViewStylePlain];

 self.table.delegate = self;
 self.table.dataSource = self;
 self.table.backgroundColor = [UIColor blackColor];

 [self.view addSubview:self.table];
 [self.table registerClass:NewTableViewCell.class forCellReuseIdentifier:@"Cell"];

Затем я завершаю cellForRowAtметод, подобный так:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *simpleTableIdentifier = @"Cell";

    NewTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[NewTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

    cell.backgroundColor = [UIColor blackColor];

    cell.name.text = [_familyDetails objectAtIndex:indexPath.row];

    return cell;
}

Проблема в том, что я ничего не вижу в своих камерах.Мой конструктор NewTableVIewCell вызывается, но ячейки отображаются пустыми (без цвета, метки и т. Д.) Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы создаете ячейку программно, убедитесь, что вы зарегистрировали ее в табличном представлении.

[self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:"yourCellId"];

В этом случае я использую универсальный UITableViewCell.Вы можете попробовать изменить текстовую метку в cellForRowAtIndexPath, чтобы увидеть, работает ли это.

Обязательно измените его на свой класс ячейки, если это необходимо.

0 голосов
/ 22 мая 2018

Чтобы dequeueReusableCellWithIdentifier, вы должны использовать

- (void)registerClass:(Class)cellClass 
forCellReuseIdentifier:(NSString *)identifier

, и обычно вам даже не нужно создавать экземпляр NewTableViewCell, если вы используете dequeueReusableCellWithIdentifier:forIndexPath:.Однако, если вы все еще используете dequeueReusableCellWithIdentifier:, вам все равно нужно создать экземпляр своего подкласса ячейки (спасибо, что напомнили мне Алехандро Иван ).

РЕДАКТИРОВАТЬ: Итак, вы должны написать что-то вроде этого,в вашем viewDidLoad например:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Your stuff...
    [self.table registerClass:[NewTableViewCell class] forCellReuseIdentifier: simpleTableIdentifier];
}
...