2013-03-01 4 views
2

Я бы хотел, чтобы мой app call viewDidAppear снова, когда пользователь приносит приложение на передний план.Вызов self.viewDidAppear, когда приложение выходит на передний план

- (void)appReturnsActive{ 

    //THIS IS THE BIT THAT DOESNT WORK, BUT [self.viewDidLoad] DOES WORK 
    [self.viewDidAppear]; 
} 

Я создаю appReturnsActive в моем видеDidAppear метод вроде этого. Он хорошо работает:

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification 
object:nil]; 

я могу сделать self.viewDidLoad, но я не могу выбрать viewDidAppear. Кто-нибудь знает, как я могу заставить это работать?

спасибо !!

+1

Пожалуйста, обратите внимание на точечную нотацию. Это неверно для этого случая. Вы используете скобки ** или ** точку, а не оба для одного и того же вызова. По соглашению вы никогда не используете точечную нотацию для функций void. – borrrden

ответ

6

Вы просто называете это неправильным. Он должен быть

[self viewDidAppear:YES]; 

Однако никогда не следует называть это или любой из viewDidLoad, viewWillAppear и так далее. Поместите код, который вы хотите запустить в viewDidAppear:(BOOL), в отдельный метод и вызовите этот метод.

надеюсь, что это поможет!

+0

Итак, разумный способ сделать это - создать новый метод и вызвать этот метод как из viewDidAppear так и для appReturnsActive? Это только для того, чтобы предотвратить беспорядок или держать вещи более организованными? – Brandon

+2

Это предотвращает нежелательное поведение, не вызывая вручную функцию, которая обычно вызывается ОС. – borrrden

3

Вы пробовали [self viewDidAppear:YES] или [self viewDidAppear:NO]?

0

Метод viewDidAppear: будет вызываться автоматически каждый раз, когда вид становится видимым, нет необходимости называть его самим. Если у вас есть код этого метода, который нужно запустить из других мест, я рекомендую вам добавить новый метод, содержащий эти инструкции. viewDidAppear: также будет выполнять операции, связанные с просмотром, которые могут нанести ущерб производительности. Все способы, если вам нужно это назвать, у вас отсутствует параметр BOOL, см. documentation.

0

При использовании защитной оболочки API, используйте – beginAppearanceTransition:animated: и – endAppearanceTransition:

Если вы реализуете пользовательский контроллер контейнера, используйте этот метод, чтобы сказать ребенку, что его взгляды о появляться или исчезать. Не вызывайте viewWillAppear :, viewWillDisappear :, viewDidAppear :, или viewDidDisappear: напрямую.

Вызов addSubView автоматически вызовет viewWillAppear: и viewDidAppear:, если представление в ViewController является контроллером вида ребенка, поэтому вызова viewWillAppear: непосредственно вызовет взгляд метода внешнего вида в два раз. Использование beginAppearanceTransition: анимированный: and - endAppearanceTransition` будет подавлять автоматическое поведение, поэтому вы вызываете его только один раз.

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