【问题标题】:Swift: Only segue from certain rows/sections in a tableSwift:仅从表中的某些行/部分中分离
【发布时间】:2020-04-10 14:32:32
【问题描述】:

我的表格中有两个部分,“已播放曲目”和“下一个曲目”。当用户点击“Up Next”中的一首歌曲时,他们会转换回同一个视图控制器,但他们点击的歌曲现在位于“Tracks Played”部分,“Up Next”部分根据歌曲的不同有不同的歌曲他们敲了敲。我的问题是用户不应该能够点击“曲目播放”部分中的歌曲,只能点击“下一个”部分中的歌曲。我已从“已播放曲目”部分中删除了选择动画和披露指示符,但从“已播放曲目”中点击一首歌曲仍会触发转场。我目前的创可贴解决方案是再次转换到同一个屏幕,但这很麻烦,如果用户想要返回,那么他们必须通过他们来自的相同视图返回。

总之,如何禁用表格中某些部分的转场?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您应该使用UITableViewDelegate 方法:

    func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath?
    

    此方法在用户点击表格中的一个单元格之后但在它被选中之前执行。它使您有机会确定是否应实际允许选择单元格。如果选择 'no',则返回 nil 并且单元格不会被选中。

    在此方法中使用您的应用程序逻辑来确定哪些行不应允许选择/segue,并在您不应该时返回 nil。

    【讨论】:

      【解决方案2】:

      为此,您可以在需要时以编程方式执行转场

      performSegue(withIdentifier: "YourseguesId", sender: nil)
      

      另一种方法是你可以将你的逻辑放在 shouldPerformSegue 方法中,如果你想打开屏幕则返回 true,如果不想打开屏幕则返回 false

      override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool
      {
         // Put your logic here where you want to perform Segue or not
          return YES
      }
      

      【讨论】:

        【解决方案3】:

        您需要断开作为 tableview 单元格的 segue 源,将 segue 重新连接到作为源的视图控制器,并在点击 table 的单元格时调用 performSegueWithIdentifier

        // MARK: UITableViewDelegate
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let cell = tableView.cellForRowAtIndexPath(indexPath)
            if shouldPerformSegue(indexPath.section) { //your logic
                self.performSegueWithIdentifier("your segue id", sender: cell)
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-30
          • 2019-03-12
          • 1970-01-01
          • 2014-04-18
          • 1970-01-01
          • 1970-01-01
          • 2017-12-24
          • 2021-05-14
          相关资源
          最近更新 更多