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”显示到不同的目标视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 tableView:(UITableView *)tableView heightForRowAtIndexPath 函数中获取单元格对象?
调用函数reloadData时如何对UITableView进行swap效果