如何解决如何解决:当我在搜索栏中单击“取消”时,TableView中的func selectRow不起作用
我有一个带音乐播放列表的TableView。当我单击该行时,该曲目开始播放,并选择了当前行。另外,我有一个搜索栏,可以正常工作。但是,如果我单击该行,然后单击搜索栏,然后最后单击“取消”按钮-则不会选择具有当前轨道的行。在其他情况下,例如向前或向后播放,行的选择效果很好。 简化后,我的代码如下:
class TableView: UIViewController,UISearchResaultUpdating,UISearchBarDelegate {
...
private var currentSelectedRowIndex = 0
func ...didSelectRowAt indexPath... {
...
currentSelectedRowIndex = indexPath.row
print(currentSelectedRowIndex)
}
...
func searchCancelButtonClicked... {
print("Cancel button pressed")
print(currentSelectedRowIndex)
tableView.selectRow(at: IndexPath(row: currentSelectedRowIndex,section 0),animated: true,scrollPosition: .middle)
}
}
//例如,我按下了第二行
Console message:
1
Cancel button pressed
1
=========================
但是未选中该行,这是什么问题?
解决方法
如果您查看UITableView
documentation,很明显地说,调用selectRow
不会导致委托收到tableView(_:didSelectRowAt:)
。
您可以将tableView(_:didSelectRowAt:)
中的操作移到另一个函数,然后在tableView(_:didSelectRowAt:)
和searchCancelButtonClicked
中调用该函数。
或者您可以使用以下代码在tableView(_:didSelectRowAt:)
中手动调用searchCancelButtonClicked
。
func searchCancelButtonClicked() {
print("Cancel button pressed")
print(currentSelectedRowIndex)
let indexPath = IndexPath(row: currentSelectedRowIndex,section: 0)
yourTableViewOutlet.delegate?.tableView?(yourTableViewOutlet,didSelectRowAt: indexPath)
tableView.selectRow(at: indexPath,animated: true,scrollPosition: .middle)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。