我有一个带有(~45)uiviewControllers的故事板应用程序。无论是在后台还是在前台,当信标触发uilocalnotification并且用户接受它时,我想“推/推”到与该信标触发器相关联的UIViewController。很简单。根据灯塔的不同,我有大约10种不同的VC,我会选择这些。
我的问题是这个。当信标触发通知时,用户可以坐在我的45个UIViewCtrler中的任何一个上,因此我的每个UIViewControllers都必须具有类似于下面的内容(以及选择器的代码块),以便对其进行操作通知和push / segue到另一个viewcontroller。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(showFoodMenuViewNow)
name:@"showfoodmenu" object:nil];
这可能会让我的故事板上出现更多的VC间推送/ segue连接,而不是你可以动摇。很乱。有没有办法消除所有的视觉故事板segues或以某种方式介绍一个所有视图所seg的“矢量viewcontroller”。然后,VC将评估本地通知并推送到相关的VC。
管理此操作的建议最佳做法是什么?
希望我有意义。
更新:
我现在已切换路径,尝试直接从我的appDelegate访问UINavigationController。我正在使用以下代码来执行此操作,虽然我的nc不是nil,但没有推送视图...
为什么这段代码不会推送所需的viewcontroller?
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
nm_vcFoodMenu *fm = [sb instantiateViewControllerWithIdentifier:@"foodmenu"];
UINavigationController *nc = [sb instantiateViewControllerWithIdentifier:@"myNavController"];
if (nc == nil){
NSLog(@"nc is nil");
} else {
NSLog(@"nc is not nil so trying to push to foodmenu");
[nc pushViewController:(nm_vcFoodMenu *)fm animated:YES];
}
这是我的故事板和各种活动部分的描述。希望这会帮助你帮助我!
感谢。
答案 0 :(得分:1)
我并没有声称有一个很好的解决方案,但以下是我为它的价值所做的事情。我还想听听是否有人有更好的解决方案。
我在AppDelegate中以编程方式管理iBeacon过渡而没有在故事板中进行任何设置。
我特别注意两个iBeacons不会导致两个过渡时间过于紧密(自上次转换以来必须经过最少几秒钟,否则我会通过计时器延迟转换或抑制它)。
在导航控制器中管理堆栈真是太痛苦了。只有在我知道我希望用户能够返回的特定情况下,我才会执行[navigationController pushViewController:newViewController animated:YES]
。在某些情况下,我最终使用ViewController
[self.navigationController setNavigationBarHidden:YES animated:YES];
中的后退按钮
醇>
不可否认,所有这一切都非常混乱。但考虑到基于iBeacon的转换可能发生的动态特性,我认为通常很难提前设置所有组合。
答案 1 :(得分:1)
在我们的项目中,我们创建了作为iBeacon委托的专用单例,并在顶视图控制器上显示我们的通知界面,因此所有逻辑都包含在一个地方,无需在其他视图控制器中进行修改。