【问题标题】:Calling UIViewController method from app delegate [duplicate]从应用程序委托调用 UIViewController 方法 [重复]
【发布时间】:2013-09-27 20:13:45
【问题描述】:

我知道这个问题有重复,但我的情况在这里不同。

当用户回到家时,(void)applicationDidEnterBackground 会从 AppDelegate 类中调用。但是一旦用户按下主页按钮,我不希望用户再次看到这个视图控制器,所以我有一个名为 (void)goToBeginning 的方法可以切换到另一个视图控制器。我希望能够从 AppDelegate 调用此方法。我真的不想为此使用NotificationCenter。也是这里挑选的解决方案: Calling view controller method from app delegate 对我不起作用,因为它初始化了新对象,而我希望能够调用已经在视图中的对象。我怎样才能做到这一点?我正在使用 iOS 7 和 XCode 5。

【问题讨论】:

  • 好问题+1,我标记为重复,因为这是一个类调用另一个类的所有相似概念,在您的情况下,您想要获取实例化类(视图控制器)的引用,所以你可以与 UI 元素交互,例如视图...我认为是原始的问题是 4 年前的,并且有很多视图和投票。

标签: ios objective-c uiviewcontroller appdelegate


【解决方案1】:
  1. 通知。但你不想要这个。
  2. 您可以在AppDelegate 中获得对您的viewController 的引用。比在(void)applicationDidEnterBackground 中调用(void)goToBeginning 方法

例如:在你的ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.myViewController = self;
}

在你的AppDelegate:

@class MyViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (weak, nonatomic) MyViewController *myViewController;

@end

AppDelegate的实现中:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self.myViewController goToBeginning];
}

【讨论】:

  • 谢谢,它工作正常
  • @Bryan 不是我,OP 不想要这个。 “我真的不想使用NotificationCenter”。你应该仔细阅读这个问题。 ^_^
  • 啊,对不起。将删除我的评论。
  • 很好的答案+1。您将收到来自编译器的警告,只有 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];应该改为 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];见stackoverflow.com/questions/5082738/…
  • 不错的解决方法,虽然从标题来看我不明白为什么它被标记为重复 - 另一个标题正好相反
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多