UITableview 函数“DidselectRowAt”显示到不同的目标视图控制器

Posted

技术标签:

【中文标题】UITableview 函数“DidselectRowAt”显示到不同的目标视图控制器【英文标题】:UITableview function "DidselectRowAt" show to different target viewcontroller 【发布时间】:2018-10-31 09:48:42 【问题描述】:

我有一个表格视图,我使用didSelectRowAtIndexPath 将哪个indexpath 过滤到哪个viewController。 我尝试使用以下代码,但失败了。 我怎么了。 谢谢。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    print("index:", indexPath.row)

    if indexPath.row != 0 || indexPath.row != 1 
        //When index = 0 or 1, it also push to next vc.
        //I don't want index 0 or 1 to push next vc.
        let vc = ViewController()
        self.navigationController?.pushViewController(vc, animated: true)
    


【问题讨论】:

if indexPath.row != 0 && indexPath.row != 1 AND 不是 OR 你的问题不清楚 @RakeshaShastri - 为什么不if indexPath.row > 1 // continue your work @Anbu.karthik 这也很好。我指出了为什么当前代码不起作用。 guard indexPath.row > 1 else return let vc = ViewController() self.navigationController?.pushViewController(vc, animated: true) 【参考方案1】:

菜鸟失误。你应该使用&& 而不是||

if indexPath.row != 0 && indexPath.row != 1 
    let vc = ViewController()
    self.navigationController?.pushViewController(vc, animated: true)

或者像 @Anbu.karthik 在 cmets 中指出的那样,更简单、更不容易混淆的方式。

if indexPath.row > 1 
    let vc = ViewController()
    self.navigationController?.pushViewController(vc, animated: true)

【讨论】:

这里也可以使用“,”分隔符来代替 && @LloydKeijzer 哦,是的,那也是。感谢那。 :) 谢谢。对不起,我是初学者。 @JimmyLee 我明白了。当我开始时,我犯了同样的错误。当您将语音直接翻译成代码时,就会发生这种情况。 @RakeshaShastri - 欣赏【参考方案2】:

最好在主队列上执行任何 UI 操作,

而且最好使用 (switch case) 而不是 (if else) 来降低代码的复杂性。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    switch indexPath.row 
        case 0, 1 :
            break
        default :
            let vc = ViewController()
            DispatchQueue.main.async 
            self.navigationController?.pushViewController(vc, animated: true)
        
    

【讨论】:

@LloydKeijzer 是的,可能任何 UI 对象都将在主队列中,但正如我所提到的,在主队列中执行此类导航是一个好习惯。

以上是关于UITableview 函数“DidselectRowAt”显示到不同的目标视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 加载完成后可以调用函数吗?

如何在 tableView:(UITableView *)tableView heightForRowAtIndexPath 函数中获取单元格对象?

调用函数reloadData时如何对UITableView进行swap效果

UITableView 函数 visibleCells 是不是返回自定义单元格数据?

为啥我的函数没有重新加载 UITableView 的数据?

在另一个视图中使用需要 UITableView 的函数?