使用Swift以编程方式更改视图 - 无法正常工作

时间:2017-10-21 23:59:09

标签: ios swift

我有以下代码用于更改视图。当我的'UITableViewRowAction'被选中并且旨在导航到不同的UITableViewController时执行此代码。但是,我收到以下错误,我不明白我做错了什么。

 let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
 let selectFolderViewController = storyBoard.instantiateViewController(withIdentifier: "SaveArticleTableViewController") as! SaveArticleTableViewController
 self.navigationController?.pushViewController(selectFolderViewController, animated: true)

我在控制台中收到的错误是:

 Could not cast value of type 'UINavigationController' (0x106f5c898) to 'lifesci_PubMed.SaveArticleTableViewController' (0x104dbb658).

我的所有ViewControllers都嵌入在导航控制器中

2 个答案:

答案 0 :(得分:1)

您很可能没有在Storyboard中正确设置视图控制器的自定义类。这是一张图片......

enter image description here

您可以在该插槽中键入“SaveArticleTableViewController”。

你很可能还有其他问题,但这会让你前进。

答案 1 :(得分:0)

这里的错误实际上非常具有描述性:

Could not cast value of type 'UINavigationController' to 'SaveArticleTableViewController'

起初我认为这是因为您的视图控制器SaveArticleTableViewController实际上并未设置自定义类。如果您正在使用Interface Builder,请确保您已在视图控制器的属性检查器中设置类类型:

如果您在代码中执行此操作,请确保您的自定义类正确继承。

但是跳过一个猜测,你的目标是" UINavigationController",但是你试图投射的自定义类名表明你的目标是一个表视图" SaveArticleTableViewController&#34 ;.此外,我敢打赌,这是而不是目的地的tableview。我要仔细检查你是否真的实例化了正确的视图控制器 - 通常你会将这个名称命名为" SaveArticleDetailViewController",或者通过你的代码进行猜测,也许它就是' s" SelectFolderViewController",但这取决于你。

例如:

let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let selectFolderViewController = storyBoard.instantiateViewController(withIdentifier: "SelectFolderViewController") as! SelectFolderViewController
self.navigationController?.pushViewController(selectFolderViewController, animated: true)

这还要求您将self.navigationController设置为包含导航控制器。