如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]
Posted
技术标签:
【中文标题】如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]【英文标题】:How to push segue from cell click in table view to another view controller [duplicate] 【发布时间】:2016-05-03 11:36:01 【问题描述】:我有一个表格视图控制器,通过单击单元格,我将用户重定向到详细视图控制器。但是当我执行 segue“当前视图控制器”时,它工作正常。但我需要的是什么?
我需要通过点击表格视图单元格来执行push segue。怎么做?
这是我的代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc: BusinessDetailViewController = storyboard.instantiateViewControllerWithIdentifier("BusinessDetailViewController") as! BusinessDetailViewController
vc.BusinessData = arrDict[indexPath.row]
self.presentViewController(vc, animated: true, completion: nil)
我已经尝试过以下行:
self.navigationController?.pushViewController(vc, animated: true)
但它不起作用。请任何解决方案!
【问题讨论】:
我没有执行任何拖放操作,也没有设置任何标识符名称。我需要完全以编程方式执行。我也提到了帽子。但这对我没有帮助 您当前的视图控制器是否嵌入在导航控制器中? 【参考方案1】:首先你的UITableViewController
必须有一个UINavigationController
要从 xCode 菜单快速将其嵌入到您的表格中
:
然后,您必须创建segue,从UITableViewController
按住ctrl-drag 到目标viewController:
然后选择segue并在属性检查器中给它一个标识符:
现在您可以在代码中执行此转场:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let cell = tableView.cellForRowAtIndexPath(indexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
performSegueWithIdentifier("mySegue", sender: cell)
【讨论】:
【参考方案2】:如果您不使用UINavigationController
,则在storyboard
中从表格单元格到目标viewController
添加segue
,并将identifier
提供给segue
。
然后在单元格上单击调用
- performSegueWithIdentifier:sender:
并实施
- prepareForSegue:sender:
【讨论】:
感谢@jagdish 这对我有用!我从在大纲视图中选择的 Cell 拖到 View Controller,给 segue 一个 Identifier,然后将其传递给 performSegue()。请注意,我还没有对示例中的数据做任何事情,因为它正在学习 Swift。但是转场正在工作:func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) let row = indexPath.row let section = indexPath.section performSegue(withIdentifier: “MySegueID”, sender: self)
【参考方案3】:
如果没有导航控制器,就无法推送控制器。您的self.navigationController
属性是nil
(可以查看)
如何解决?
A :您需要通过代码或故事板将视图控制器嵌入到导航控制器中
【讨论】:
在代码中。如何使用导航控制器调用我当前的视图控制器。因为有更多的视图控制器。所以如果我现在通过情节提要这样做。肯定我的所有视图都会受到影响【参考方案4】:试试这个代码,它对我有用,
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("PlayViewController") as! PlayViewController
self.navigationController?.pushViewController(controller, animated: true)
并设置情节提要 ID,示例如下,
希望对你有帮助
【讨论】:
以上是关于如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 UIButton 单击时以编程方式创建 Segue 或推送到另一个视图控制器
UISplitViewController 将详细视图推送到表/主视图