簡體   English   中英

如何修復:當我在搜索欄中單擊“取消”時,TableView 中的 func selectRow 不起作用

[英]How to fix: func selectRow in the TableView does not work when I click Cancel in search bar

我有一個帶有音樂曲目播放列表的 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:)中所做的任何事情移動到另一個 function 並在tableView(_:didSelectRowAt:)和 searchCancelButtonClicked 中searchCancelButtonClicked

或者您可以使用以下代碼在searchCancelButtonClicked中手動調用tableView(_:didSelectRowAt:)

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM