Изменение представлений и делегирование слушателей событий - PullRequest
1 голос
/ 09 июля 2011

Привет всем :) У меня небольшая проблема, и я хотел бы узнать из вашего опыта, как бы вы справились с этим.

Мой главный экран - это экран входа в систему и после успешного входа в системуЯ инициализирую новый вид и переключаюсь на него следующим образом, который я нашел здесь на SO:

    // Switch views 
    [txtUser resignFirstResponder];
    [txtPass resignFirstResponder];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:[self view] cache:YES];
    [UIView setAnimationDuration:0.6];

    UIViewController *homeView = [[[UIViewController alloc] initWithNibName:@"HomeView" bundle:nil] autorelease];
    [self.view insertSubview:homeView.view atIndex:0];

    [UIView commitAnimations];

После входа в систему я не хочу переключать вид, когда устройство вращается, но "willRotateToInterfaceOrientation" неничего не поймает в моем подвиде, оно ловит только если я помещаю это в родительский.

Так что я думал о трех вариантах

  • Найти способ поймать это вращениесобытие внутри вложенного представления
  • После входа в систему полностью переключите представления, а не просто добавьте их в качестве вспомогательного представления (чтобы он сам был родительским?) - я не знаю, возможно ли это, а если - не уверенкак это сделать, но я хотел бы услышать ваш опыт.
  • Найдите какой-нибудь способ перейти к этому повернутому представлению от родителей (что, я думаю, не очень хороший вариант)

Простите, если яего немного запутали, надеюсь, вы понимаете, и если нет, я бы хотел разработать и добавить больше необходимой информации, если таковая требуется:)

Заранее спасибо, Шай.

Править: Я добавил навигационный контроллер, как предложил @Ahmed, и выдвинул новое представление, но вместо HomeView.xib у меня появляется пустое серое представление. Возможно, есть какие-нибудь идеи по этому поводу?

На AppDelegate.h

<- language: lang-cpp ->

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

На AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window.rootViewController = self.viewController;

// Initialize navigation controller
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:self.window.rootViewController];
self.navigationController = aNavigationController;
[aNavigationController release];
[_window addSubview:[_viewController view]];

[self.window makeKeyAndVisible];
return YES;
}

А затем, после успешного входа в систему, я попытался

// Switch views 

    [txtUser resignFirstResponder];
    [txtPass resignFirstResponder];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:[self view] cache:YES];
    [UIView setAnimationDuration:0.6];

    UIViewController *homeView = [[[UIViewController alloc] initWithNibName:@"HomeView" bundle:nil] autorelease];
    [self.navigationController pushViewController:homeView animated:YES];
    [self dismissModalViewControllerAnimated:YES];

    [UIView commitAnimations];

Но я получаю пустой серый вид (как новый) вместо моего HomeView ... есть идеи, как это могло случиться?...

Еще раз спасибо вам, ребята, спасатели!

Ответы [ 2 ]

0 голосов
/ 09 июля 2011

Ух, у меня буквально была точно такая же проблема. Я решил это с помощью двух разных объектов UIWindow. RootViewController каждого окна UIWindow будет получать уведомления о ротации. Итак, в вашем делегате приложения создайте отдельное окно UIWindow, в котором может храниться экран входа. Просто установите для скрытого свойства другого окна значение YES, пока вход в систему не будет успешным.

0 голосов
/ 09 июля 2011

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

[self.navigationController pushViewController:homeView animated:YES];  

, но для этого в вашем приложении должен быть экземпляр navigationController.Или вы должны начать с шаблона на основе навигации, если вы его не используете.Вы просто добавляете представление homeViewController в представление входа в систему, чтобы только добавляемое представление и homeViewController не получали никаких событий, таких как изменение ориентации.

Редактировать:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.

YourRootViewController *rootViewController = [[YourRootViewController alloc] init];

UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.viewController = aNavigationController;
[aNavigationController release];
[_window addSubview:[_viewController view]];

   // self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...