我正在尝试做看似简单的事情,但遇到了困难。我有一个选项卡栏应用程序,其设置页面是表格视图。用户可以通过选择一行来更改设置,该行将推送具有新设置选项的新表格视图。当用户选择新设置时,我将信息发送回主表视图,并使用新设置填充表视图。
问题:我也有一个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是否来自选项卡栏的最佳方法吗?为什么在委托方法之前调用viewwill出现在我的SettingsTableViewController上?每次用户通过选项卡栏选择选项卡时,有关如何从数据模型加载数据的任何建议。我是否缺少一些明显的方法?谢谢你的帮助!
最佳答案
到didSelectViewController
调用时,完成您想要的工作已经为时已晚。如您所见,viewDWillAppear
代表触发了。尝试将代码移到shouldSelectViewController
的tabBarController
委托中,这应该足够早来设置数据。
关于ios - 标签栏 Controller -如果从标签栏启动segue则更改数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31145466/