带有自定义单元格的IOS静态表仅绘制随机单元格

带有自定义单元格的IOS静态表仅绘制随机单元格,ios,uitableview,static,application-settings,Ios,Uitableview,Static,Application Settings,我正在尝试为我的应用创建设置表视图。我试图模仿它,使其与Iphone上的gneral设置风格相同。我通过继承UITableCell创建了自己的自定义单元格类。我给了它合适的iBoules,我把它们连接到了故事板上。我还将交换机连接到了我的tableViewControler,但由于某种原因,我的代码只返回了一个空单元格。只有一个单元格不是问题,因为我的设置中只有这一个。我进行了三次检查,确保在代码和情节提要中使用了相同的单元标识符。有人知道我为什么要拿回空白手机吗 这是我自定义单元格的.h文件

我正在尝试为我的应用创建设置表视图。我试图模仿它,使其与Iphone上的gneral设置风格相同。我通过继承UITableCell创建了自己的自定义单元格类。我给了它合适的iBoules,我把它们连接到了故事板上。我还将交换机连接到了我的tableViewControler,但由于某种原因,我的代码只返回了一个空单元格。只有一个单元格不是问题,因为我的设置中只有这一个。我进行了三次检查,确保在代码和情节提要中使用了相同的单元标识符。有人知道我为什么要拿回空白手机吗

这是我自定义单元格的.h文件

@interface NHPSettingsCell : UITableViewCell
@property (nonatomic,weak) IBOutlet UILabel *settingLabel;
@property (nonatomic,strong) IBOutlet UISwitch *settingSwitch;
@end
我的问题代码在这里,自定义单元格的.h文件:

#import "NHPSettingsCell.h"

@implementation NHPSettingsCell
@synthesize  settingLabel, settingSwitch;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end
在自定义视图控制器中绘制单元格的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SettingsCell";
    NHPSettingsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[NHPSettingsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellStyleDefault;
    }
    cell.settingLabel.text = @"firstSetting";

    //check the if user wants promt of disclaimer each time or not.
    if([prefs boolForKey:@"firstSetting"] == YES){
        cell.settingSwitch.on = YES;
    }else{
        cell.settingSwitch.on = NO;
    }

    return cell;
}
现在让我恼火的是,我已经成功地为使用自定义单元格的动态表实现了CellForRowatineXpath方法。我还使用默认单元格实现了静态表的代码,但是对于具有自定义单元格的静态表,它似乎不起作用。下面是我如何在动态表上实现自定义单元格的代码。请注意,我不必初始化单元格,但它可以工作

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"InteractionResultCell";
    NHPResultCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    // Configure & Fill the cell
    cell.leftLabel.text = [[resultsList objectAtIndex:indexPath.row] substanceName];
    cell.rightLabel.text = [[resultsList objectAtIndex:indexPath.row] substanceName2];
    NSString *color = [NSString stringWithFormat:@"%@", [[resultsList objectAtIndex:indexPath.row] color]];

    //Change a hex value to a readable 0x number to pass ot hte macro so we can go from a hex color to a RGB system.
    NSScanner *scanner;
    unsigned int tempint=0;    
    scanner = [NSScanner scannerWithString:color];
    [scanner scanHexInt:&tempint];

    cell.severityButton.backgroundColor = UIColorFromRGB(tempint);


    return cell;
}
dequeueReusableCellWithIdentifier:仅当已创建单元以防止重复内存分配时才起作用。如果不先创建单元格,则无法重用该单元格。在xib中创建的静态单元格是默认类型。这就是为什么它不适用于带有自定义单元格的静态表。重复使用后添加单元创建代码,就像在自定义视图控制器的CellForRowatineXpath:方法中所做的那样:

编辑-要初始化自定义单元格,必须从xib加载。将以下类方法添加到NHPSettingsCell.m中:

然后从自定义视图控制器将其调用为:

cell = (NHPSettingsCell*)[tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 
if (Nil == cell) {
     cell = [NHPSettingsCell createTextRowWithOwner:self];
}
dequeueReusableCellWithIdentifier:仅当已创建单元以防止重复内存分配时才起作用。如果不先创建单元格,则无法重用该单元格。在xib中创建的静态单元格是默认类型。这就是为什么它不适用于带有自定义单元格的静态表。重复使用后添加单元创建代码,就像在自定义视图控制器的CellForRowatineXpath:方法中所做的那样:

编辑-要初始化自定义单元格,必须从xib加载。将以下类方法添加到NHPSettingsCell.m中:

然后从自定义视图控制器将其调用为:

cell = (NHPSettingsCell*)[tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 
if (Nil == cell) {
     cell = [NHPSettingsCell createTextRowWithOwner:self];
}
两个问题:

如果您使用的是静态单元格,请不要在视图控制器numberOfRows、numberOfSections、cellForRow中实现任何数据源方法。。。因为这将覆盖您在故事板中构建的内容。该表包含您在故事板中为其提供的部分、行和内容。 从故事板加载的单元(动态原型或静态单元)使用initWithCoder:,而不是initWithStyle:,进行初始化。awakeFromNib:是放置设置代码的更好地方。 两个问题:

如果您使用的是静态单元格,请不要在视图控制器numberOfRows、numberOfSections、cellForRow中实现任何数据源方法。。。因为这将覆盖您在故事板中构建的内容。该表包含您在故事板中为其提供的部分、行和内容。 从故事板加载的单元(动态原型或静态单元)使用initWithCoder:,而不是initWithStyle:,进行初始化。awakeFromNib:是放置设置代码的更好地方。
你误解了我的问题。我的问题是我文章顶部第一个.m文件中的代码,而不是底部的代码。底部的那个很好用。您提供给我的代码块已在我的代码中。还是我误解了你的评论?我改变了我的帖子,把我的问题代码放在这里是为了说明我对修复哪个块感兴趣。你误解了我的问题。我的问题是我文章顶部第一个.m文件中的代码,而不是底部的代码。底部的那个很好用。您提供给我的代码块已在我的代码中。还是我误解了你的评论?我更改了帖子,将我的问题代码包含在这里,以指定我对修复哪个块感兴趣。你能提供一些如何使用initWithCOder的代码吗?awakeFromNib也一样。我很抱歉不得不问一下,但这段代码很快就要到期了,我担心会破坏atm的功能。这只是一个标准的init方法,self=[super initWithCoder:aDecoder];如果self等从NIB唤醒也是一种标准方法。我不知道我能给你什么样的例子?你能提供一些如何使用initWithCOder的代码吗?awakeFromNib也一样。我很抱歉不得不问一下,但这段代码很快就要到期了,我担心会破坏atm的功能。这只是一个标准的init方法,self=[super initWithCoder:aDecoder];如果self等从NIB唤醒也是一种标准方法。我不知道我能给你什么样的样品?
cell = (NHPSettingsCell*)[tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 
if (Nil == cell) {
     cell = [NHPSettingsCell createTextRowWithOwner:self];
}