首先,这是我出队cells
的方式:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
switch (indexPath.row) {
case 0:
{
UINib *nib = [UINib nibWithNibName:@"TableViewCellLabel" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:@"CellLabel"];
cell = (TableViewCellLabel *)[tableView dequeueReusableCellWithIdentifier:@"CellLabel"];
}
break;
case 1:
{
UINib *nib = [UINib nibWithNibName:@"TableViewCellTextfield" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:@"CellTextfield"];
cell = (TableViewCellTextfield *)[tableView dequeueReusableCellWithIdentifier:@"CellTextfield"];
}
break;
default:
break;
}
然后,我将在
willDisplayCell
委托方法中设置其属性:-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// set transparent cell bg
[cell setBackgroundColor:[UIColor clearColor]];
// init cell view
switch (indexPath.row) {
case 0:
{
((TableViewCellLabel *)cell).tableViewCellType = TableViewCellTypeLabel;
((TableViewCellLabel *)cell).delegate = self;
}
break;
case 1:
{
((TableViewCellTextfield *)cell).tableViewCellType = TableViewCellTypeTextfield;
((TableViewCellTextfield *)cell).delegate = self;
}
break;
default:
break;
}
}
我的预期结果是两个不同的
tableViewCellType
属性值,但是最终得到两个cells
保持相同类型的TableViewCellTypeLabel
。我不知道我在哪里做错了,所以我需要一些帮助。谢谢。 最佳答案
首先,在控制器的viewDidLoad()
的tableView中注册笔尖。
然后,如果您将表格视图分为两部分,首先要显示CellLabel
类型的单元格,然后在第二部分中显示CellTextfield
类型的单元格,则应在cellForRowAtIndexPath
方法中切换大小写而不是IndexPath的行,但是indexPath.section
(您必须在dataSource方法中返回2个段计数),并且不要在其中注册任何内容。如果仅需要2行-请勿更改switch indexPath.row code
。
接下来,应该在出队后立即在delegate
方法中设置单元格(设置tableViewCellType
和cellForRowAtIndexPath
)。这将使您不必第二次隐式导致类型。
在cellForRowAtIndexPath
方法的结尾,您将返回已配置的单元格实例。
swift中的示例(在obj-c中,这里的结构很重要):
override func viewDidLoad() {
super.viewDidLoad()
var nib = UINib.init(nibName: "TableViewCellLabel", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "CellLabel")
nib = UINib.init(nibName: "TableViewCellTextfield", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "CellTextfield")
}
CellForRow:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
switch indexPath.section {
case 0:
guard let cellLabel = tableView.dequeueReusableCell(withIdentifier: "CellLabel") as? TableViewCellLabel else {
return cell
}
cellLabel.tableViewCellType = TableViewCellTypeLabel
cellLabel.delegate = self
return cellLabel
case 1:
guard let cellField = tableView.dequeueReusableCell(withIdentifier: "CellTextfield") as? TableViewCellTextfield else {
return cell
}
cellField.tableViewCellType = TableViewCellTypeTextfield
cellField.delegate = self
return cellField
default:
return cell
}
}
对我来说,请清除:您在
numberOfSections
中返回1部分,在numberOfRowsInSection
中返回2部分?如果项目中的单元格上有静态数字,请使用静态单元格:分别对其进行初始化,保留惰性属性,并在完全希望返回时返回。在这种情况下,您将不会使用dequeueReusableCell
。关于ios - 如何设置不同的自定义UITableViewCell的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49281139/