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