尝试addSubView()
进入UITableViewCell
错误消息
2015-05-18 11:26:46.048 xxxxx [1128:437863] *断言失败 - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:],/ SourceCache / UIKit / UIKit-3347.44 / UITableView.m:6245 2015-05-18 11:26:46.053 DateTick [1128:437863] * 由于未被捕获而终止应用 异常'NSInternalInconsistencyException',原因:'无法 将具有标识符AgeCell的单元格出列 - 必须注册一个笔尖或一个 标识符的类或连接故事板中的原型单元格' ***首先抛出调用堆栈:(0x1856982d8 0x196ebc0e4 0x185698198 0x18654ced4 0x18a251e84 0x100094c20 0x100095070 0x18a3d9a68 0x18a3cd890 0x18a1b9268 0x18a0d5760 0x189a1de1c 0x189a18884 0x189a18728 0x189a17ebc 0x189a17c3c 0x189a11364 0x1856502a4 0x18564d230 0x18564d610 0x1855792d4 0x18ed8f6fc 0x18a13efac 0x1000c0a9c 0x19753aa08)libc ++ abi.dylib:终止未捕获 NSException类型的异常
我已在AgeCell
标识符
UITableViewCell
我的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("AgeCell", forIndexPath: indexPath) as! UITableViewCell //1
let slider = RangeSlider(frame:cell.bounds)
slider.minimumValue = 1;
slider.selectedMinimumValue = 2;
slider.maximumValue = 10;
slider.selectedMaximumValue = 8;
slider.minimumRange = 2;
slider.addTarget(self, action:"updateRangeLabel", forControlEvents:UIControlEvents.ValueChanged)
cell.addSubview(slider)
return cell
}
P.S:BTW我的UITableViewController
是静态单元格,而不是动态单元格。
答案 0 :(得分:3)
Swift的语法是
let nib = UINib(nibName: "AgeCell", bundle: nil)
self.tableView.registerNib(nib, forCellReuseIdentifier:"AgeCell")
答案 1 :(得分:1)
请注意,dequeueReusableCellWithIdentifier:和dequeueReusableCellWithIdentifier:forIndexPath:是不同的方法。
文档说:
重要说明:您必须使用以下命令注册类或nib文件 registerNib:forCellReuseIdentifier:或 registerClass:forCellReuseIdentifier:调用它之前的方法 方法
Check out this Q&A.了解有关此主题的更多详情
在swift中注册NIB:
UINib nib = UINib.nibWithNibName("AgeCell", bundle:nil);
self.tableView.registerNib(nib, forCellReuseIdentifier:"AgeCell");
答案 2 :(得分:0)
您需要使用UITableView注册单元格的笔尖。这样,UITableView就会知道您的reuseIdentifier "AgeCell"
与单元格匹配。您通常在viewDidLoad
中为视图控制器执行此操作。
在目标C中:
-(void)viewDidLoad {
[super viewDidLoad];
UINib * nib = [UINib nibWithNibName:@"AgeCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"AgeCell"];
}
在斯威夫特:
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "AgeCell", bundle: nil)
self.tableView.registerNib(nib, forCellReuseIdentifier:"AgeCell")
}
答案 3 :(得分:0)
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "itemTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! itemTableViewCell
let item = items[indexPath.row]
cell.nameLabel.text = item.name
return cell
}