首先,这是我将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
。我无法弄清楚我在哪里做错了所以我需要一些帮助。谢谢。
答案 0 :(得分:1)
首先在控制器的viewDidLoad()
的tableView中注册nib
然后,如果您将表视图分成两个部分,首先要显示CellLabel
类型的单元格,而在CellTextfield
类型的第二部分单元格中,您应该在{{}}中切换大小写不是IndexPath的行{1}}方法,但是cellForRowAtIndexPath
(你必须在dataSource方法中返回2个部分),而不是在那里注册任何东西。如果您只需要2行 - 请勿更改indexPath.section
接下来,您应该在出列后立即在switch indexPath.row code
方法中设置您的单元格(设置delegate
和tableViewCellType
)。这样您就不会在第二次隐式引导类型
在cellForRowAtIndexPath
方法结束时,您将返回已配置的单元格实例
swift中的示例(在obj-c相同,结构在这里很重要):
cellForRowAtIndexPath
CellForRow:
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")
}
请告诉我:您在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
}
}
中返回1个部分,在numberOfSections
中返回2个部分?如果项目中的单元格上有静态数字,请使用静态单元格:单独初始化它们,保留延迟属性,当您确切地希望返回它时返回。在这种情况下,您不会使用numberOfRowsInSection
。