我已经创建了很多自定义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/

10-14 23:12