Проблема с дрожанием iPhone: viewDidAppear не вызывается при загрузке viewController - PullRequest
0 голосов
/ 25 февраля 2010

Я пытаюсь обнаружить дрожание на устройстве iPhone, поэтому для того, что я прочитал, мне нужно установить контроллер представления в качестве первого ответчика для метода viewDidAppear. Этот метод должен вызываться автоматически, но по какой-то причине этот метод никогда не вызывается. Вызывается только viewDidLoad.

это мой код (я ставлю только соответствующие части):

BuildHouseViewController.h:

@ interface BuildHouseViewController: UIViewController {

BuildHouseViewController.m:

- (void)viewDidLoad {
[super viewDidLoad];
[self.view becomeFirstResponder];}

-(void)viewDidAppear:(BOOL)animated{
[self becomeFirstResponder];
[super viewDidAppear:animated];}

-(BOOL)canBecomeFirstResponder {
return YES;}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{

NSLog(@"shake"); 
if ( event.subtype == UIEventSubtypeMotionShake )
{  }

if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
    [super motionEnded:motion withEvent:event];
}

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

Любая помощь будет оценена.

Edit:

Я вызываю вид из другого вида, используя:

[self.view addSubview:nextScreen.view];

Вид отображается на экране

Ответы [ 4 ]

1 голос
/ 26 февраля 2010

Спасибо за быстрые ответы.

Я нашел что-то интересное. Я пытался загрузить одно и то же представление, у меня проблемы по-разному, и я получаю разные результаты

-Как я уже говорил, если я вызываю его из другого вида, используя:

[self.view addSubview:nextScreen.view];

viewDidLoad никогда не вызывается, и я не могу обнаружить сотрясения.

-Теперь, если я позвоню из AppDelegate, используя:

[window addSubview:nextScreen.view];

viewDidLoad называется !! и я могу обнаружить сотрясения, однако это решение не представляется возможным, я должен быть в состоянии вызвать его с другой точки зрения

-Если я вызываю его из другого вида, используя:

[self presentModalViewController:nextScreen animated:YES];

viewDidLoad называется !! Однако я не хочу использовать модальный контроллер вида, но, похоже, это единственное решение моей проблемы, обнаружены сотрясения.

Странно, что первый метод неправильно загружает представление, это ошибка ??

0 голосов
/ 14 декабря 2010

В дополнение к комментариям @ Genericrich, вы можете вручную вызвать viewDidAppear после того, как вложите подвид в себя.

[self.view addSubview:theViewController.view];
[theViewController viewDidAppear:FALSE];

Это сработало для меня. Надеюсь, это поможет кому-то еще.

0 голосов
/ 16 октября 2010

viewDidAppear: (BOOL) анимированный вызывается только тогда, когда представление показано UINavigationController или UITabBarController. Если вы добавите представление контроллера представления в подпредставление (такое как представление прокрутки или что у вас), оно не будет вызвано. Вы могли бы подумать, что это так, но вы ошибаетесь. Просто получил немного от этого сам.

0 голосов
/ 25 февраля 2010

[self intoFirstResponder] и т.п. на самом деле не делают его первым ответчиком. Метод вызывается, когда представление становится первым респондентом. Так что это не делает то, что вы думаете.

Во-вторых, viewDidAppear будет вызываться только тогда, когда представление действительно появилось. Это появляется на экране? Где вы говорите, что это будет отображаться? Вам нужно либо добавить представление контроллера представления как подпредставление другого представления, либо поместить в стек контроллера навигации, либо передать как модальное представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...