从 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

如何调用从 NSObject 类添加视图

从 UIView ios 推送视图控制器

如何从 iOS 中的 NSObject 类导航到 ViewController?

如何从 NSobject 类 iOS 在任何视图控制器类上弹出 MFMessageComposeViewController 对象

ios开发之 NSObject详解