Повторное использование пользовательских TableViewCell - PullRequest
1 голос
/ 23 октября 2019

У меня есть viewController, который содержит программно созданный tableView.

@property (strong, nonatomic) UITableView *numbersTableView;
//...
self.numbersTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, -100, self.view.frame.size.width-20, 50)];
self.numbersTableView.delegate = self;
self.numbersTableView.dataSource = self;
self.numbersTableView.tag = 1;
self.numbersTableView.layer.cornerRadius = 5;
[self.numbersTableView setBounces:false];
[self.numbersTableView setHidden:true];
[self.numbersTableView registerClass:[AZGCountryCell class] forCellReuseIdentifier:@"NumbersTableViewCell"];
[self.view addSubview:self.numbersTableView];

Для ячейки прототипа я хочу использовать прототип, который я создал где-то еще в другом viewController, и я разработалЭто в раскадровке.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (tableView.tag == 1) { //tableView == self.numbersTableView
        NSString *cellID = @"NumbersTableViewCell";
        AZGCountryCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
        if (cell == nil) {
            cell = [[AZGCountryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
        }
        cell.countryName.text = self.numbersArray[indexPath.row].number;
        cell.flagImageView.image = [UIImage imageNamed:self.numbersArray[indexPath.row].country];
        return cell;
    }
}

И моя пользовательская ячейка содержит одну UIImageView и одну UILabel, но когда я запускаю код, ячейки пусты, и я вижу, что UIImageView и UILabelноль!

#import <UIKit/UIKit.h>

@interface AZGCountryCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UIImageView *flagImageView;
@property (strong, nonatomic) IBOutlet UILabel *countryName;
@property (strong, nonatomic) IBOutlet UILabel *countryCode;

@end

#import "AZGCountryCell.h"

@implementation AZGCountryCell
@synthesize flagImageView;
@synthesize countryName;

- (void)awakeFromNib {
    [super awakeFromNib];
    self.flagImageView.layer.cornerRadius = self.flagImageView.frame.size.width/2;
    self.flagImageView.layer.masksToBounds = YES;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
}

@end

Тогда что мне делать, чтобы в моих numbersTableView?

были правильно заполненные ячейки?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

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

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

В качестве альтернативы вы можете реализовать пользовательский интерфейс ячейки в коде в подклассе ячейки табличного представления.

0 голосов
/ 23 октября 2019

Вы получаете пустую ячейку, потому что пользовательская ячейка табличного представления не зарегистрирована, используйте [self.numbersTableView registerNib:[UINib nibWithNibName:@"AZGCountryCell" bundle:nil] forCellReuseIdentifier:@"NumbersTableViewCell"];

вместо

[self.numbersTableView registerClass:[AZGCountryCell class] forCellReuseIdentifier:@"NumbersTableViewCell"];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...