我已经创建了多次自定义UITableCells并且我从未遇到过这个问题,所以我希望你能帮助我找到我错过或搞砸的东西。当我运行我的应用程序时,表格视图中的单元格似乎是具有默认样式的标准单元格。
我有一个SettingsTableCell,它是UITableViewCell的子类。我有一个SettingsTableCell.xib,其中包含一个UITableViewCell,里面有几个标签和一个文本字段。我已经将xib中的类类型设置为SettingsTableCell,将xib的文件所有者设置为我的表控制器。
My 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
答案 0 :(得分:1)
我不知道为什么,但我知道在实例变量中保存单元格时会发生奇怪的事情。
您是否尝试直接在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的完整代码会有所帮助。
答案 1 :(得分:0)
我的第一个想法(可能是错误的!)是这是一个z顺序问题,并且单元格默认标签显示在文本编辑控件的顶部。因此无法看到它。我猜它仍然会响应,因为标签正在传递触摸。
只是猜测: - )