unwind segue Xcode 10 swift 导航控制器不工作
unwind segue Xcode 10 swift with navigation controller not working
我已经在互联网上寻找答案并按照苹果文档中的步骤进行操作,但无济于事。
我有两个视图控制器。一个包含收藏夹列表 (FavouriteTableViewController),另一个包含添加到收藏夹列表的项目的详细信息 (ExplorationDetailViewController)。
我在 ExplorationDetailViewController 的导航栏(来自导航控制器场景)上有一个保存按钮,我想单击该按钮以启动展开转场。我已经执行了以下步骤,但是当我点击保存按钮时,它完全没有反应。我包括了与放松最相关的代码。
我在 ExplorationResultViewController 中创建了 prepareforsegue 函数,我将从那里将图像数据和标签传递给另一个 ViewController 作为展开序列的一部分
class ExplorationResultViewController: UIViewController {
var exploration_result: Favourites?
@IBOutlet weak var ExplorationLabel: UILabel!
@IBOutlet weak var ExplorationPhoto: UIImageView!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Pass the selected object to the new view controller.
super.prepare(for: segue, sender: sender)
let photo = ExplorationPhoto.image
let name = ExplorationLabel.text ?? ""
exploration_result = Favourites(name: name, photo: photo)
}
然后在 FavouriteTableViewController 中,我添加了一个 unwindtoHere 方法,该方法将图像和标签添加到列表中。
class FavouritesTableViewController: UITableViewController {
// MARK: Properties
var favourites = [Favourites]()
// MARK: Actions
@IBAction func unwindToFavouriteList(sender: UIStoryboardSegue) {
if let sourceViewController = sender.source as? ExplorationResultViewController, let favourite = sourceViewController.exploration_result{
// Add a new meal.
let newIndexPath = IndexPath(row: favourites.count, section: 0)
favourites.append(favourite)
tableView.insertRows(at: [newIndexPath], with: .automatic)
}
然后进入我的故事板,我控制并拖动 ExplorationDetailViewController 中的保存按钮,并将其连接到场景顶部的出口项。我的展开方法在弹出窗口中显示为:'unwindToFavouriteListWithSender'。我select这个。
我现在应该可以走了,但是当我 运行 模拟器并单击“保存”按钮时,它完全没有反应。参见 StoryBoard Design
请帮忙
根据您的评论,我猜测问题是在按下“保存”按钮时视图控制器层次结构中没有 FavouritesTableViewController。你不能放松到已经不存在的东西:"unwind"意味着返回到 较早 实例化并保持存在的东西,在视图控制器层次结构中的当前视图控制器之上。
例如,假设我们有
UINavigationController -> (root view controller) -> FavouritesTableViewController
-> (push) ExplorationResultViewController
现在我们可以从探索控制器展开到收藏夹控制器,因为收藏夹控制器已经在探索控制器之前的层次结构中。听起来您可能 不 欣赏这个事实。
我已经在互联网上寻找答案并按照苹果文档中的步骤进行操作,但无济于事。 我有两个视图控制器。一个包含收藏夹列表 (FavouriteTableViewController),另一个包含添加到收藏夹列表的项目的详细信息 (ExplorationDetailViewController)。
我在 ExplorationDetailViewController 的导航栏(来自导航控制器场景)上有一个保存按钮,我想单击该按钮以启动展开转场。我已经执行了以下步骤,但是当我点击保存按钮时,它完全没有反应。我包括了与放松最相关的代码。
我在 ExplorationResultViewController 中创建了 prepareforsegue 函数,我将从那里将图像数据和标签传递给另一个 ViewController 作为展开序列的一部分
class ExplorationResultViewController: UIViewController {
var exploration_result: Favourites?
@IBOutlet weak var ExplorationLabel: UILabel!
@IBOutlet weak var ExplorationPhoto: UIImageView!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Pass the selected object to the new view controller.
super.prepare(for: segue, sender: sender)
let photo = ExplorationPhoto.image
let name = ExplorationLabel.text ?? ""
exploration_result = Favourites(name: name, photo: photo)
}
然后在 FavouriteTableViewController 中,我添加了一个 unwindtoHere 方法,该方法将图像和标签添加到列表中。
class FavouritesTableViewController: UITableViewController {
// MARK: Properties
var favourites = [Favourites]()
// MARK: Actions
@IBAction func unwindToFavouriteList(sender: UIStoryboardSegue) {
if let sourceViewController = sender.source as? ExplorationResultViewController, let favourite = sourceViewController.exploration_result{
// Add a new meal.
let newIndexPath = IndexPath(row: favourites.count, section: 0)
favourites.append(favourite)
tableView.insertRows(at: [newIndexPath], with: .automatic)
}
然后进入我的故事板,我控制并拖动 ExplorationDetailViewController 中的保存按钮,并将其连接到场景顶部的出口项。我的展开方法在弹出窗口中显示为:'unwindToFavouriteListWithSender'。我select这个。
我现在应该可以走了,但是当我 运行 模拟器并单击“保存”按钮时,它完全没有反应。参见 StoryBoard Design 请帮忙
根据您的评论,我猜测问题是在按下“保存”按钮时视图控制器层次结构中没有 FavouritesTableViewController。你不能放松到已经不存在的东西:"unwind"意味着返回到 较早 实例化并保持存在的东西,在视图控制器层次结构中的当前视图控制器之上。
例如,假设我们有
UINavigationController -> (root view controller) -> FavouritesTableViewController
-> (push) ExplorationResultViewController
现在我们可以从探索控制器展开到收藏夹控制器,因为收藏夹控制器已经在探索控制器之前的层次结构中。听起来您可能 不 欣赏这个事实。