ios - 如何修复:当我在搜索栏中单击“取消”时,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
文档,它清楚地表明调用 selectRow
不会导致委托接收tableView(_:didSelectRowAt:)
。
您可以将您正在做的任何事情tableView(_:didSelectRowAt:)
移到另一个函数中,然后在 and 中调用该tableView(_:didSelectRowAt:)
函数searchCancelButtonClicked
。
或者您可以使用以下代码手动调用tableView(_:didSelectRowAt:)
in 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)
}
推荐阅读
- networking - DHCP 请求消息是广播还是单播?
- powershell - 我可以绕过 Powershell 中的权限吗?
- sql - VBA SQL Sum-group by 语句最多只占用两位十进制值
- android - 使用 Retrofit 上传大文件
- python-3.x - 在python中计算条件概率
- python - 为什么Seaborn的pip安装后出现属性错误
- javascript - 带有 Javascript 的 Sticky Sidebar 效果(不使用插件)
- facebook-instant-articles - Google Analytics + FB Instant ARticles:应该使用什么来源/媒介使 IA 流量显示在“社交”频道中
- javascript - 如何检查对象是否需要密钥
- sed - 使用 sed 替换正则表达式和包含数字的变量