我正在尝试做一些看似简单的事情,但我遇到了困难 . 我有一个标签栏应用程序,其中包含一个表格视图的设置页面 . 用户可以通过选择一行来更改设置,该行使用新的设置选项推送新的表视图 . 当用户选择新设置时,我将信息发送回主表视图并使用新设置填充表视图 .
问题:我也有一个SAVE按钮 . 如果用户没有保存新设置,我想丢弃它们 . 如果用户选择新选项卡(不保存设置)然后选择设置选项卡,则用户输入的最后一个数据仍在tableView中 . 我理解这是因为在创建视图后不再调用viewdidload .
基本上我想要这样的逻辑:
如果通过单击标签栏图标启动segue:使用dataModel加载表视图 .
否则,如果前一个屏幕是数据输入屏幕:使用用户选择的数据加载表格视图 .
如果我不是't using a tab bar controller I would do this by loading the dataModel using viewdidload and loading the tableview using delegate methods. The problem is I can' t使用viewdidload . 我也不能使用viewwillappear,因为从表视图打开屏幕时以及从堆栈弹出入口视图控制器时都会调用它 .
我试图在AppDelegate中设置Tab Bar Controller的委托方法
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
if (tabBarController.selectedIndex == 2)
{ let navController = viewController as! UINavigationController
let settingsTableViewController = navController.viewControllers[0] as! SettingsTableViewController
settingsTableViewController.loadFromDataModel = true
println("In did select view controller in app delegate")
}
}
如果loadFromDataModel = true,那么我从Settings Table View Controller中的数据Model加载 . 这是问题所在 - 这只有在我从选项卡中来回两次时才有效 . 太奇怪了 . 我输入了println语句,似乎按以下顺序执行:
-
在SettingsTableViewController中调用ViewWillAppear
-
tabBarController:从AppDelegate调用didSelectViewController(变量loadFromDataModel已更新 - 但为时已晚,因为已经调用了viewwillappear)
总结:这是确定segue是否来自标签栏的最佳方法吗?为什么在委托方法之前调用我的SettingsTableViewController上的viewwillappear?每次用户通过选项卡栏选择选项卡时,有关如何从数据模型加载数据的任何建议 . 我错过了一些明显的方法吗?谢谢你的帮助!
1 回答
当
didSelectViewController
被调用时,做你想做的事已经太晚了 . 正如您所知,viewDWillAppear
委托解雇 . 尝试将代码移动到tabBarController
的shouldSelectViewController
委托中 . 在设置数据的过程中应该足够早 .