我有一个LaunchScreen.storyboard和Main.storyboard
在我的Main.storyboard内,主故事板有我的欢迎屏幕。我在那里还有另外两个ViewController。
流程为Main(storyboard)-> ItemResults(VC)-> ItemSingleView(VC)
从main到其中一个ViewController,我执行以下操作。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let itemResults = storyboard.instantiateViewController(withIdentifier: "ItemResults") as! ItemResultsViewController
itemResults.itemDescriptionData = self.itemDescription.text!
self.present(itemResults, animated: false, completion: nil)
这会将我从Main带到ItemResults并传递一个String。在ItemResults(VC)内部,我有一个TableView。我要做的是单击单元格,它从单元格收集信息,打开一个模式并在其中显示与被单击的单元格有关的信息。
那封信看起来像这样
let storyboard = UIStoryboard(name: "ItemResults", bundle: nil)
let singleItemResult = storyboard.instantiateViewController(withIdentifier: "ViewSingleItem") as! ViewSingleItem
singleItemResult.theItemID = selectedItem.itemID
self.present(singleItemResult, animated: true, completion: nil)
然后我得到以下错误。
'在捆绑包NSBundle中找不到名为'ItemResults'的情节提要
我知道为什么会收到错误,因为ItemResults不是情节提要,而是VC。经过研究后,我可以使用Storyboard Reference,但随后我必须重新设计布局。....这样做真的很有趣。
为什么这是个问题?在上面的第二个命令中,如果我将ItemResults更改为Main,它可以工作,问题是,当我单击它时,模态显示出来,但是应用程序再次显示Main屏幕,并且它不停留在ItemResults上。 / p>
有人可以帮忙吗?谢谢!
添加didSelect
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
tableView.isUserInteractionEnabled = true
let selectedItem = self.currentItemsArray[indexPath.row]
print(selectedItem.itemID)
}
我通过在故事板中从表视图单元格中添加一个序列号到新的ViewController来“修复”了该问题。我给那个Seque一个ID,然后执行以下方法。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowItemDetailsSeque",
let destination = segue.destination as? ViewSingleItem,
let itemIndex = tableView.indexPathForSelectedRow?.row
{
let selectedItem = self.currentItemsArray[itemIndex]
destination.theItemID = selectedItem.itemID
print(selectedItem.itemTitle)
}
}