Swift:仅从表中的某些行/部分中分离

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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)
    

【讨论】:

以上是关于Swift:仅从表中的某些行/部分中分离的主要内容,如果未能解决你的问题,请参考以下文章

从 Access 应用程序中分离出组件 VB

仅从表中选择一些列

在一对多关系表中,仅从表A中获得在表B中具有多个对应行的那些行

如何从同一列sql中分离日期和时间

在 Git 中分离项目的不同部分

仅从表中选择最新记录并使其快速,如何?