为 UITableView 的每一行推送不同的 UIView
Posted
技术标签:
【中文标题】为 UITableView 的每一行推送不同的 UIView【英文标题】:Push different UIView for each row of UITableView 【发布时间】:2015-12-30 18:59:21 【问题描述】:当我选择一行时,我正在尝试推送一个新视图。
let identifiers:[String] = ["vc1", "vc2", "vc3", "vc4", "vc5"]
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let identifier = identifiers[indexPath.row]
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc: UINavigationController = storyboard.instantiateViewControllerWithIdentifier("\(identifier)") as! UINavigationController
self.presentViewController(vc, animated: true, completion: nil)
使用此 tableView 调用的所有不同视图都有自己的类和 Storyboard ID。
目前我得到错误:
无法将“testApp.CalculatorViewController”类型的值转换为“UINavigationController”
【问题讨论】:
你能写let vc = storyboard.instantiateViewControllerWithIdentifier("\(identifier)")
吗?
@PhillipMills 是的,我可以,但它会部分工作。但我想在下一页上获取 navigationController,如果我这样做,navigationController 就不存在了。
正如在下面的评论中提到的,推送和呈现是不同的东西......但主要的一点是,如果不是这样,你就不能称某事为 UINavigationController
。
【参考方案1】:
我认为您正在尝试将 UIViewController 转换为 UINavigationController。
请试试这个。这可能会对您有所帮助。
let identifiers:[String] = ["vc1", "vc2", "vc3", "vc4", "vc5"]
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let identifier = identifiers[indexPath.row]
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc: UIViewController = storyboard.instantiateViewControllerWithIdentifier("\(identifier)") as! UIViewController
self.navigationController?.pushViewController(vc, animated: true, completion: nil)
【讨论】:
如果我替换 UINavigationController,是的,页面被正确调用,但我在下一个视图中不再有我的 NavigationController。我需要在每个 ViewController 上手动添加它还是有办法在之前自动生成它? 您只需将 UINavigationController 设置为初始视图控制器。并使用 push segue 而不是 present (Modal)。 我编辑了我的问题,以便在推送而不是展示时更加清晰。因此,我将代码的最后一行替换为: self.navigationController?.pushViewController(vc, animated: true) 如果您愿意,如果您替换该行,我可以选择您的答案。无论如何,非常感谢您的帮助! 我编辑我的答案并将当前视图控制器替换为推送视图控制器。请将其标记为已接受。以上是关于为 UITableView 的每一行推送不同的 UIView的主要内容,如果未能解决你的问题,请参考以下文章
从 UIPopoverController 内的 UITableView 中的一行推送 viewController
如何将 3 个图像添加到 UITableView 的每一行?
在 Node.js 中为 postgres 表中的每一行以不同的间隔为每一行运行重复任务