#ios #objective-c #uitableview
#iOS #objective-c #uitableview
Вопрос:
Я следую этому руководству по созданию пользовательской UITableViewCell, и в объекте, возвращаемом из [tableView dequeueReusableCellWithIdentifier:@"ID"]
, все его UILabels и т.д. Являются nil
. В этом руководстве ничего не говорится о том, как создавать их самостоятельно, и я ожидаю, что мне это не понадобится, судя по тому, как работает остальная часть iOS, но я не знаю, почему они не создаются автоматически. Например, здесь cell.lightName
есть nil
, хотя он подключен к метке, которая завершается в пользовательском представлении в IB.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *dataCellIdentifier = @"Data Cell";
AnalysisHistoryTableViewCell *cell = (AnalysisHistoryTableViewCell*)[tableView dequeueReusableCellWithIdentifier:dataCellIdentifier forIndexPath:indexPath];
self.selectedAnalysis = self.analysisResults[indexPath.row];
cell.lightNameLabel.text = self.selectedAnalysis.lightName;
return cell;
}
Что я делаю не так, из-за чего мои UILabel
s не существуют?
Комментарии:
1. Я предполагаю, что в вашем AnalysisHistoryTableViewCell вы синтезировали свойство, которое связано с UILabel в вашей ячейке.
2. Вы зарегистрировали перо в табличном представлении (
registerNib:
)?3. Вы используете Xib или раскадровку? Где вы объявляете метку? Вы синтезировали метку или нет?
4. Я не синтезировал метку. Обычно я просто ссылаюсь на это с помощью
self
. Я попробовал это, но это не помогло.5. @sooper Я этого не делал. Однако это устранило проблему. Интересно, почему это не упоминается в руководстве.
Ответ №1:
Для пользовательской ячейки вам нужно сначала зарегистрировать перо:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"AnalysisHistoryTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"Data Cell"];
}
Затем в вашем cellForRowAtIndexPath
методе:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
AnalysisHistoryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Data Cell"];
//etc
return cell;
}