我已经创建了很多自定义UITableCells,但从未遇到过这个问题,所以希望您能帮助我找到我错过或弄乱的东西。当我运行应用程序时,表格视图中的单元格似乎是具有默认样式的标准单元格。
我有SettingsTableCell是UITableViewCell的子类。我有一个SettingsTableCell.xib,其中包含一个UITableViewCell,内部是几个标签和一个文本字段。我将xib中的类类型设置为SettingsTableCell,并将xib的文件所有者设置为表控制器。
我的SettingsTableController有一个名为tableCell的IBOutlet属性。我的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显然不是我的xib中的UILabel,因为我的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
最佳答案
我不知道为什么是,但是我确实知道在将单元格保存在实例变量中时发生了奇怪的事情。
您是否尝试过直接在cellForRowAtIndexPath
中加载单元格?
if (cell == nil) {
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyNibName" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[UITableViewCell class]]) {
cell = currentObject;
break;
}
}
}
您对
cellForRowAtIndexPath
和SettingsTableCell.h / m的完整代码会有所帮助。关于iphone - 来自xib的自定义UITableViewCell无法正确显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5346755/