Загрузка подкласса UITableViewCell с использованием файла XIB
Мне не удается получить мой CustomTableViewCell
, подкласс UITableViewCell
для отображения в моем представлении таблицы.
Я использую xib для представления этой ячейки, но я предполагаю, что код для делегата источника данных не изменяется. Я постарался установить идентичный идентификатор повторного использования внутри ячейки представления таблицы XIB.
Я изолировал проблему от того, что метод источника данных, который возвращает ячейку таблицы, работает некорректно, вот оно:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
DataObject *foo = [self.dataArray objectAtIndex:indexPath.row];
if (cell == nil)
{
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[[cell overview] setText:foo.overview];
[[cell price] setText:foo.price];
NSLog(@"cell initialized, description text is %@",cell.overview.text);
return cell;
}
Не знаю, почему это не работает, но последний оператор журнала всегда печатает (нуль) в конце, и да, я убедился, что свойство overview
объекта данных имеет в нем допустимую строку. То же самое для price
.
Ответы
Ответ 1
В файле .h вы пишете его.
IBOulet CustomTableViewCell *tableCell;
и подключиться к файловому владельцу в файле .xib CustomTableViewCell.
Вы изменяете это в (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
cell = tableCell;
}
Я думаю, это будет полезно для вас.
Ответ 2
1) Сделайте свой собственный класс ячеек отдельно
2) XIB: изменение класса владельца файла в NSObject
3) XIB: изменение UITableViewCell в MyTableViewCell
4) Если вы хотите добавить код представления внутри таблицы как
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"MyCell";
MyTableViewCell *cell = (MyTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *arrayCellXib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell"
owner:self
options:nil];
if (indexPath.row == 0) {
// first table cell
cell = [arrayCellXib objectAtIndex:0]; // *
......
}else {
cell = [arrayCellXib objectAtIndex:1]; // *
}
...
}
return cell;
}
Объект с индексом 0,1... является индексом, для какого порядка вы делаете MyTableViewCell в xib, если вы хотите иметь более одной пользовательской ячейки. означает в классе MyTableViewCell u создавать неограниченную пользовательскую ячейку и использовать в соответствии с требованиями.
Как правило, просто сделайте ONE пользовательскую ячейку в XIB и выполните именно это:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int thisRow = indexPath.row;
NSString *exampleText = [yourData objectAtIndex:thisRow];
static NSString *CellID = @"cu5";
FancyCell *cell =
(FancyCell *)[tableView dequeueReusableCellWithIdentifier:CellID];
if (cell == nil)
{
NSArray *cellTeam =
[[NSBundle mainBundle] loadNibNamed:@"FancyCell"
owner:self options:nil];
cell = [cellTeam objectAtIndex:0];
}
[cell someFunction:exampleText];
[cell.someLabel setText:exampleText];
return cell;
}
В надежде может помочь u:)