使用 NIB 无法识别 UITableViewCell 内单击的单元格 UITableView
Posted
技术标签:
【中文标题】使用 NIB 无法识别 UITableViewCell 内单击的单元格 UITableView【英文标题】:Not Recognizing Clicked Cell UITableView inside UITableViewCell using NIB 【发布时间】:2018-01-02 03:03:22 【问题描述】:我正在编写一个具有多个单元格的仪表板的应用程序。其中一个单元格有问题,但答案是动态填充的,所以我决定使用 UITableView 来处理。
我将 UITableViewCell 设置为内部 UITableView 的委托和数据源,并进行了定义单元格和选定状态的配置。
extension SurveyTableViewCell: UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
answers = model.getSurveyAnswers()
return (answers?.count)!
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier, for: indexPath) as! InsideSurveyTableViewCell
cell.idAnswer.text = alphabetQuestion[indexPath.row]
cell.answer.text = answers?[indexPath.row]
return cell
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 100.0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier, for: indexPath) as! InsideSurveyTableViewCell
cell.selectRow()
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier, for: indexPath) as! InsideSurveyTableViewCell
cell.deselectRow()
但是内部 UITableViewCell 中单元格内的点击无法识别。在将用户回答发送到服务器后,我需要识别此点击。
我看到了一些解决方案,但使用了故事板。我在我的项目中只使用笔尖。
但我仍然尝试使用我在 youtube 上看到的使用情节提要的方法。
在将使用内部 UITableView 的单元格上,我声明了一个函数来设置内部 tableView 的委托和数据源,并给它一个标签。
extension SurveyTableViewCell
func setTableViewDataSourceDelegate<D:UITableViewDelegate & UITableViewDataSource>(_ dataSourceDelegate: D, forRow row: Int)
subTableView.dataSource = dataSourceDelegate
subTableView.delegate = dataSourceDelegate
subTableView.reloadData()
比在管理外部 UITableView 的 viewController 上:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if tableView.tag == 1
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier) as! InsideSurveyTableViewCell
cell.idAnswer.text = "A."
cell.answer.text = "QUALQUER COISA"
return cell
if retrivedCell is SurveyTableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: SurveyTableViewCell.identifier, for: indexPath) as! SurveyTableViewCell
cell.delegate = self
cell.setTableViewDataSourceDelegate(self, forRow: indexPath.row)
cell.setPositionRow(row: indexPath.row - 1)
cell.subTableView.rowHeight = UITableViewAutomaticDimension
cell.subTableView.estimatedRowHeight = 50
return cell
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if tableView.tag == 1
return 3
var numberOfCells: Int = 0
if cellsToPresent != nil
numberOfCells = cellsToPresent!.count
return numberOfCells + 1
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if tableView.tag == 1
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier) as! InsideSurveyTableViewCell
cell.selectRow()
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
if tableView.tag == 1
let cell = tableView.dequeueReusableCell(withIdentifier: InsideSurveyTableViewCell.identifier) as! InsideSurveyTableViewCell
cell.deselectRow()
selectRow和deselectRow是改变内部tableView单元格标签的方法。
但还是没有成功。
如果我使用方法:
tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath)
应用程序中断抱怨我正在尝试使用相同的 indexPath 将不同的单元格出列。
感谢您的帮助。
【问题讨论】:
不确定这是否是问题所在,但您在使单元格出列的第一个位置没有for: indexPath
,只有第二个。
你试过bringSubview(toFront:)
的方法吗?
@Skywalker,没试过。我不清楚我应该在哪里使用它。
@GilbertoKreisler 尝试使用我在答案下面提到的方法。如果您的问题是因为这个,它应该可以正常工作......并且会提高性能
【参考方案1】:
不要使用
let cell = tableView.dequeueReusableCell(withIdentifier:)
在 didSelect
或 didDeSelect
方法中。
使用
let cell = tableView.cellForRow(at: indexPath)
希望对你有帮助。
【讨论】:
再次调用cellForRow(at:)
方法会有性能问题。为什么不将单元格保存在数组中并访问array[indexPath.row]
?我认为这对性能会更好。以上是关于使用 NIB 无法识别 UITableViewCell 内单击的单元格 UITableView的主要内容,如果未能解决你的问题,请参考以下文章