2013-09-23 3 views
11

Я знаю, что есть дубликаты этого вопроса, но моя ситуация здесь разная.Вызов метода UIViewController из делегата приложения

Когда пользователь возвращается домой (void)applicationDidEnterBackground получает вызов из класса AppDelegate. Однако, как только пользователь нажимает кнопку «домой», я не хочу, чтобы пользователь снова видел этот контроллер представлений, поэтому у меня есть метод с именем (void)goToBeginning, который переключается на другой контроллер представления. Я хочу, чтобы иметь возможность вызвать этот метод из AppDelegate. Я действительно не хочу использовать для этого NotificationCenter. Также выбранное решение здесь: Calling view controller method from app delegate не работает для меня, поскольку он инициализирует новый объект, тогда как я хочу иметь возможность вызвать объект, который уже находится в представлении. Как я могу это сделать? Я использую iOS 7 и XCode 5.

+0

Отличный вопрос +1, я отмечен как дубликат, потому что это все похожие понятия класса, вызывающего другой класс, в вашем случае вы хотите получить ссылку на экземпляр класса (контроллер представления), чтобы вы могли взаимодействовать с пользовательским интерфейсом элементы, такие как взгляды ... Вопрос, который я считаю оригинальным, - это 4 года назад и имеет много мнений и голосов. –

ответ

42
  1. Извещение. Но ты этого не хочешь.
  2. Вы можете получить ссылку на свой viewController в AppDelegate. Чем называют этот (void)goToBeginning метод в (void)applicationDidEnterBackground

Например: В вашем 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 «s:

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

Спасибо, он отлично работает –

+0

@ Брайан Не я, ОП не хочу этого. «Я действительно не хочу использовать« NotificationCenter ». Вы должны внимательно прочитать вопрос.^_^ – sunkehappy

+0

Ах, извините. Удалит мой комментарий. – Bryan

Смежные вопросы