Iphone 更改视图和委托事件侦听器

Iphone 更改视图和委托事件侦听器,iphone,uiview,rotation,Iphone,Uiview,Rotation,大家好:我有一个小问题,我想听听你们的经验,你们会如何处理这个问题 我的主屏幕是一个登录屏幕,成功登录后,我将初始化一个新视图,并按照我在SO上找到的以下方式切换到该视图: //切换视图 [txtUser辞职FirstResponder]; [txtPass辞职第一响应者]; [UIView beginAnimations:nil上下文:nil]; [UIView setAnimationTransition:UIViewAnimationTransitionUrlUp forView:[自视图

大家好:我有一个小问题,我想听听你们的经验,你们会如何处理这个问题

我的主屏幕是一个登录屏幕,成功登录后,我将初始化一个新视图,并按照我在SO上找到的以下方式切换到该视图:

//切换视图 [txtUser辞职FirstResponder]; [txtPass辞职第一响应者]; [UIView beginAnimations:nil上下文:nil]; [UIView setAnimationTransition:UIViewAnimationTransitionUrlUp forView:[自视图]缓存:是]; [UIView设置动画持续时间:0.6]; UIViewController*homeView=[[UIViewController alloc]initWithNibName:@homeView bundle:nil]自动释放]; [self.view insertSubview:homeView.view索引:0]; [UIView委员会]; 登录后,当设备旋转时,我不想切换视图,但willRotateToInterfaceOrientation不会捕获我的子视图中的任何内容,它只在我将其放入父视图时捕获

所以我考虑了三个选择

找到在子视图中捕捉此旋转事件的方法 登录后,完全切换视图,而不只是将其添加为子视图,这样它本身就是父视图我不知道这是否可能,如果是我不知道如何做到这一点,但我想听听你的经验。 找到一些方法从父视图进入这个旋转视图,我认为这不是一个很好的选择 如果这有点混乱,我很抱歉,希望您能理解,如果没有,我愿意详细说明并添加更多需要的信息,如果需要:

提前感谢,, 谢

编辑:
我已经添加了导航控制器,如@Ahmed建议并推送了新视图,但我得到的是一个空的灰色视图,而不是我的HomeView.xib,对此有什么想法吗

在AppDelegate.h上

关于AppDelegate.m

-BOOLapplication:UIApplication*应用程序完成启动时使用选项:NSDictionary*启动选项{ self.window.rootViewController=self.viewController; //初始化导航控制器 UINavigationController*aNavigationController=[[UINavigationController alloc]initWithRootViewController:self.window.rootViewController]; self.navigationController=aNavigationController; [aNavigationController release]; [[窗口添加子视图:[[视图控制器视图]]; [self.window makeKeyAndVisible]; 返回YES; } 然后,在成功登录后,我尝试了

//切换视图 [txtUser辞职FirstResponder]; [txtPass辞职第一响应者]; [UIView beginAnimations:nil上下文:nil]; [UIView setAnimationTransition:UIViewAnimationTransitionUrlUp forView:[自视图]缓存:是]; [UIView设置动画持续时间:0.6]; UIViewController*homeView=[[UIViewController alloc]initWithNibName:@homeView bundle:nil]自动释放]; [self.navigationController pushViewController:homeView动画:是]; [自我解散Modalviewcontrolleranimated:是]; [UIView委员会]; 但是我得到了一个空的灰色视图,就像一个新的视图,而不是我的HomeView。。。你知道怎么会这样吗


再次感谢你们是救生员

您应该导航到另一个视图,而不是将其作为子视图添加

[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;
}

哇,我也有同样的问题。我通过使用两个不同的UIWindow对象解决了这个问题。每个UIWindow的rootViewController将接收旋转通知。因此,在您的应用程序委托中,创建一个单独的UIWindow来存储登录屏幕。只要将另一个窗口的hidden属性设置为YES,直到登录成功。

我正在使用基于视图的应用程序。。。如何在我的应用程序中添加navigationController实例?更简单的方法是使用基于导航的模板创建一个新项目,并在其中添加viewController:或者用我在上面的编辑中提到的代码替换appdelegate中的didFinishLaunchingCode代码。我真的不想开始将文件移动到新项目中,我宁愿在常规项目中解决这个问题。我将尝试您添加的代码,非常感谢!:我添加了导航控制器并推送了新的视图,但是我得到的是一个空的灰色视图,而不是我的HomeView。xib,我用代码编辑了主要帖子-有什么想法吗?好吧,所以在继续测试之后-它实际上只是在做动画,但它停留在同一个视图控制器上-这更奇怪。。。我很困惑…我对此一无所知,你说创建一个新的UIWindow对象是什么意思?你能帮我做一个小的代码示例或一些我可以使用的链接吗谢谢。创建一个新的UIWindow是解决这个问题的大锤式方法,它本身也有一些危险。如果你愿意,有更好的方法
我们从零开始,但从你现在的位置开始,似乎你就可以有一个旋转。。。在登录VC中调用willRotate。。。在新的VC中,如果已经创建了新的VC。嘿,丹尼尔,如果你能阅读本主题的其余部分,我会很高兴的,目前,就像@Ahmed建议的那样,我将navigationController添加到我的appdelegate中,并尝试从那里切换,但运气不佳,也许你可以帮我?我在这篇文章中添加的编辑也是,你谈论这些更好的方式是什么?所以下次我会知道的。谢谢:导航控制器非常简单。如果你这样做的话,我建议你稍微清理一下你的代码,消除旧方案的残余,你应该能够让它工作——没有真正的技巧。你为什么加上这句话:[self dismissModalViewControllerAnimated:YES];没有必要。是的,我现在知道了,谢谢:
 - (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;
}