来自xib的自定义UITableViewCell无法正常显示

时间:2011-03-18 00:06:04

标签: iphone ios uitableview interface-builder

我已经创建了多次自定义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中的样子: Screenshot of Interface Builder

当我运行我的应用程序时,表格显示好像所有单元格都是标准的默认样式单元格,但是: Screenshot of my table view

非常奇怪的部分是......如果我点击文本区应该是的单元格区域,键盘确实会出现!文本字段不可见,没有光标或类似的东西......但它确实响应。可见的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

2 个答案:

答案 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顺序问题,并且单元格默认标签显示在文本编辑控件的顶部。因此无法看到它。我猜它仍然会响应,因为标签正在传递触摸。

只是猜测: - )