从 NSObject 类推送 iOS UIViewController
Posted
技术标签:
【中文标题】从 NSObject 类推送 iOS UIViewController【英文标题】:Pushing iOS UIViewController from NSObject class 【发布时间】:2014-06-22 19:25:01 【问题描述】:我的 AppDelegate 中有以下代码。它在检查应用内购买过期期间使用,如果订阅即将过期,将显示一个弹出窗口供用户选择续订,如果他们这样做,它将把应用内购买的视图控制器推送到堆栈上。
我想将代码从 AppDelegate 中移出,并移到它自己的 NSObject 类中(只是为了整洁)。但是,如何从另一个类调用推送视图控制器?
self.window.rootViewController
在 NSObject 类中不存在,所以当然不会起作用。
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UICollectionViewController *ivc = (UICollectionViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"IAPViewController"];
[navigationController pushViewController:ivc animated:YES];
【问题讨论】:
【参考方案1】:在你的 NSObject 类中,当你想推送一个 vc 时,通过 NSNotificationCenter 发布一个通知:
[[NSNotificationCenter defaultCenter] postNotificationWithName:@"PushMyViewControllerNote" object:nil];并在 AppDelegate.m 中注册观察者:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions //... [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(handlePushVCNotification:) 名称:@"PushMyViewControllerNote" 对象:无]; //... 返回是; //... - (void)handlePushVCNotification:(NSNotification *)note // 首先你必须找到当前可见的视图控制器 // 怎么做,自己找吧 :) // 但你可以查看 https://gist.github.com/snikch/3661188 UIViewController *visibleVC = [self findVisibleVC]; UINavigationController *nc = visibleVC.navigationController; UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; UICollectionViewController *ivc = (UICollectionViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"IAPViewController"]; [nc pushViewController:ivc 动画:YES];【讨论】:
【参考方案2】:你应该做的是创建一个继承自 NSObject 的单独类。将其称为 AppPurchase。然后,将您的 AppPurchase 类导入您的应用委托。至于推送视图控制器,该代码应该与您的 AppPurchase 类分开。
AppPurchase 类是模型的一部分,不应负责推动视图控制器。如果您的 AppPurchase 实例中的数据发生更改,则控制器可以采取一些措施并更改您的视图。
您应该学习更多关于 MVC 或模型-视图-控制器的信息。
【讨论】:
非常好!是的,只见树木不见森林,错过了显而易见的事情。谢谢。以上是关于从 NSObject 类推送 iOS UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何从 UIView 推送 UIViewController
如何从 iOS 中的 NSObject 类导航到 ViewController?
如何从 NSobject 类 iOS 在任何视图控制器类上弹出 MFMessageComposeViewController 对象