我试图做一些看似简单的事,但我遇到了困难。我有一个标签栏应用程序,其中包含一个表格视图的设置页面。用户可以通过选择一行来更改设置,该行使用新的设置选项推送新的表视图。当用户选择新设置时,我将信息发送回主表视图并使用新设置填充表格视图。
问题:我也有一个SAVE按钮。如果用户没有保存新设置,我想丢弃它们。如果用户选择新选项卡(不保存设置)然后选择设置选项卡,则用户输入的最后一个数据仍在tableView中。我理解这是因为在创建视图后不再调用viewdidload。
基本上我想要这样的逻辑:
如果通过单击标签栏图标启动了segue:使用dataModel加载表格视图 否则,如果前一个屏幕是数据输入屏幕:使用用户选择的数据加载表格视图。
如果我没有使用标签栏控制器,我会通过使用viewdidload加载dataModel并使用委托方法加载tableview来完成此操作。问题是我无法使用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,那么我从设置表视图控制器中的数据模型加载。这是问题所在 - 这只有在我从选项卡中来回两次时才有效。太奇怪了。我输入了println语句,似乎执行按以下顺序执行:
在SettingsTableViewController中调用ViewWillAppear
tabBarController:正在调用didSelectViewController AppDelegate(和变量loadFromDataModel已更新 - 但为时已晚,因为已经调用了viewwillappear)
总结:这是确定segue是否来自标签栏的最佳方法吗?为什么在委托方法之前调用我的SettingsTableViewController上的viewwillappear?每次用户通过选项卡栏选择选项卡时,有关如何从数据模型加载数据的任何建议。我错过了一些明显的方法吗?谢谢你的帮助!
答案 0 :(得分:0)
当调用didSelectViewController
时,做你想做的事已经太晚了。你可以通过viewDWillAppear
代表解雇来判断。尝试将代码移动到shouldSelectViewController
tabBarController
代理人iframe
该代理人应该尽早设置数据。