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:仅从表中的某些行/部分中分离的主要内容,如果未能解决你的问题,请参考以下文章