问题:在搜索结果斯威夫特搜索结果控制器Segue公司到另一个视图控制器
我有一个表,视图,用户可以通过滚动找到的东西,或者使用搜索栏。搜索栏不是使用StoryBoard创建的。我的看法有一个UISearchController
处理搜索栏和搜索结果更新。我遇到的问题是,因为我的SearchResultsController
由另一个控制器实例化,所以我无法对另一个视图执行segue,或者至少我找不到解决方案。除了我的搜索结果控制器和其目的地视图之间的一切之外,一切都可以正常工作。
我想这样做
有我MyNavTableViewController
委托MySearchResultsController
。在搜索结果控制器中,当用户点击TableViewCell
时,它将继续到另一个视图。我没有使用StoryBoard来完成这个我很难使用segues转换到另一个视图。
如果我不能得到这个工作,我可能会做:
这是至关重要的我通过视图之间的信息,对于我来说,我使用塞格斯始终做到了。但是,如果这不起作用,我可能会尝试通过将其推送到导航控制器堆栈并将数据写入共享数据库或其他东西来模式地呈现视图。我宁愿使用segue。
研究: 绝对不止这些,但我不会在网址上占用太多空间。
Creating a segue programmatically
我的设置
我会尽力保持这个尽可能简明扼要。有比我显示更多的代码。我只是试着把它清理干净,这样我才能提出重要的东西。我也在改变一些名字,因为可能有敏感信息。这可能不是什么大不了的事情,但我宁愿安全。
class MyNavTableViewController: UIViewController, UITableViewDataSource{
//this is
@IBOutlet weak var tableView: UITableView!
var searchController: UISearchController!
override func viewDidLoad(){
...code
tableView.registerClass(UITableViewCell.self,forCellReuseIdentifier: tblId)
let resultsController = MySearchResultsController()
resultsController.databaseFilePath = databaseFilePath()
//this is essential that I use a segue because between my views I'm passing information between them.
resultsController.photo = photo!
searchController = UISearchController(searchResultsController: resultsController)
let searchBar = searchController.searchBar
searchBar.placeholder = searchBarPlaceHolderText
searchBar.sizeToFit()
tableView.tableHeaderView = searchBar
searchController.searchResultsUpdater = resultsController
}
}
MySearchResultsController: UITableViewController, UISearchResultsUpdating {
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
//self.performSegueWithIdentifier(imagePrepareStoryBoardId, sender: tableView.cellForRowAtIndexPath(indexPath))
/*let imagePrepare = ImagePrepareController()
customSegue = SearchResultSegue(identifier: imagePrepareId, source: self, destination: imagePrepare)*/
//neither storyboard nor navigationController can be nil.
let destVC = self.storyboard!.instantiateViewControllerWithIdentifier(imagePrepareStoryBoardId)
//destVC.photo = photo!
//self.presentViewController(destVC, animated: false, completion: nil)
self.navigationController!.pushViewController(destVC, animated: false)
}
}
我失败的尝试
1)直线上升赛格瑞 - 不工作,因为MySearchResultsController是不是在故事板视图。从我读过的所有内容来看,segues只能在SB中创建。
2)将视图推入导航堆栈。唯一的问题是,我不能在视图之间发送数据(或者至少从我读过的内容)。我也得到这个错误在这个突破点:
let destVC = self.storyboard!.instantiateViewControllerWithIdentifier(imagePrepareStoryBoardId)
fatal error: unexpectedly found nil while unwrapping an Optional value
我double检查imagePrepareStoryBoardId。这是正确的。
3)使用自定义segue - 正如您从注释掉的行中可以看出,这也不起作用。我一直在使用SB,因此这种方法对我来说有点新鲜。我可能会把它搞乱。
为什么不使用协议作为代表? –
@ViníciusAlbino我不知道这是如何帮助的(从我自己的无知)。我的意思不是粗鲁的。您可能会看到解决方案,并且可以轻松地将其总结为此,但我没有遵循。如果你能扩大这一点,我将不胜感激。 – enigmasck