Я создавал пользовательские UITableCells несколько раз, и я никогда не сталкивался с этой проблемой, поэтому я надеюсь, что вы поможете мне найти то, что я пропустил или испортил. Когда я запускаю свое приложение, ячейки моего табличного представления выглядят как стандартные ячейки со стилем по умолчанию.
У меня есть SettingsTableCell, который является подклассом UITableViewCell. У меня есть SettingsTableCell.xib, который содержит UITableViewCell и внутри, которые являются парой меток и текстовым полем. Я установил тип класса в xib равным SettingsTableCell и владельцем файла xib для моего контроллера таблицы.
Мой SettingsTableController имеет свойство IBOutlet с именем tableCell. Мой cellForRowAtIndexPath содержит следующий код для загрузки xib моего табличного представления и назначения его свойству tableCell контроллера таблицы:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellSettings";
SettingsTableCell *cell = (SettingsTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"SettingsTableCell" owner:self options:nil];
cell = self.tableCell;
self.tableCell = nil;
NSLog(@"cell=%@", cell);
}
// Configure the cell...
NSArray *sections = [self.settingsDictionary objectForKey:KEY_GROUPS];
NSDictionary *sectionInfo = [sections objectAtIndex:[indexPath section]];
NSArray *itemsInSection = [sectionInfo objectForKey:KEY_FIELDS];
NSDictionary *item = [itemsInSection objectAtIndex:[indexPath row]];
cell.textLabel.text = [item objectForKey:KEY_LABEL_NAME];
cell.labelName.text = [item objectForKey:KEY_LABEL_NAME];
cell.labelUnitsType.text = [item objectForKey:KEY_LABEL_UNITS];
return cell;
}
Вот как выглядит мой xib в IB:
Когда я запускаю свое приложение, таблица отображается так, как будто все ячейки являются стандартными ячейками стиля по умолчанию:
Серьезно странная часть, хотя ... если я коснусь области ячейки, где ДОЛЖНО быть текстовое поле, клавиатура действительно появится! Текстовое поле не видно, нет курсора или чего-то в этом роде ... но оно отвечает. Очевидно, что видимая UILabel - это не UILabel из моей xib, потому что метка в моей xib выравнивается по правому краю, а метка, показанная в приложении, выравнивается по левому краю.
Я невероятно смущен тем, как это происходит. Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Вот код для моего класса SettingsTableCell:
@interface SettingsTableCell : UITableViewCell {
UILabel *labelName;
UILabel *labelUnitsType;
UITextField *field;
}
@property (nonatomic, retain) IBOutlet UILabel *labelName;
@property (nonatomic, retain) IBOutlet UILabel *labelUnitsType;
@property (nonatomic, retain) IBOutlet UITextField *field;
@end
#import "SettingsTableCell.h"
@implementation SettingsTableCell
@synthesize labelName;
@synthesize labelUnitsType;
@synthesize field;
- (void)dealloc {
[labelName release];
labelName = nil;
[labelUnitsType release];
labelUnitsType = nil;
[field release];
field = nil;
[super dealloc];
}
@end