如何以编程方式启动/处理iPhone的视图?

时间:2009-04-09 19:59:52

标签: iphone uiviewcontroller

我没有使用标签栏或任何其他控件 - 我希望基本上将当前视图动态地更改为不同的视图控制器(即通过代码)。我根本不使用Interface Builder ......

例如,假设我们创建了三个视图控制器:

(这可能不是最好的例子,但我试图让它变得简单化)

View_Hello.m(和.h)

View_Goodbye.m(和.h)

View_Ciao.m(和.h)

我们的ViewerAppDelegate将启动View01_Hello。

View_Hello将有一个自定义触摸方法,如果滑动则需要转到View_Ciao,如果只是触摸,则需要View_Goodbye。

关于如何做到这一点的任何想法(并且请不要说“哦,你需要在这个例子中使用xxx接口元素”。我需要能够在视图中基于程序控制随机更改视图我正在处理的应用程序)

过去一周我一直在浏览谷歌和StackOverflow,并浏览了我的三本O'Reilly Cocoa书籍(以及三本iPhone开发书籍),所有这些书籍都只使用简单的界面 - 但没有显示任何例子就像我想要做的那样。

===========

编辑(@Andrew Grant):

例如:

View_Ciao *viewCiao; 
-(void) viewDidLoad { 
  viewCiao = [[View_Ciao alloc] initWithNibName:@"View_Ciao" bundle:nil];
  [viewCiao.view setNeedsDisplay];
  [super viewDidLoad];
}

这次崩溃。 : - )

=============

编辑(@Daniel Dickison)

很棒 - 很有效!

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    // create the second view, remove the first, and then display the second

    viewCiao = [[ViewCiao alloc] init];
    [viewController.view removeFromSuperview];   
    [window addSubview:viewCiao.view];
}

3 个答案:

答案 0 :(得分:2)

您是否在Erica Sadun的 iPhone Developer's Cookbook 中看到了配方2-8“Swiping Views”?她使用touchesBegan和touchesMoved来确定滑动方向,然后根据touchesEnded中的方向设置动画。

您可以扩展或修改此选项以添加点击检测,以确定要转换到哪个视图。无论如何,如果你想看一下,食谱就在第69页或附近。还有video (mov) sample herecode sample here.

答案 1 :(得分:1)

加载适当的视图并将其作为子视图添加到父视图,然后从其父视图中删除现有视图。

如果您只有一个级别的视图,那么您的窗口就是父级。

答案 2 :(得分:1)

如下:

@interface AppDelegate : ...
{
    View_Hello *hello;
    View_Goodbye *goodbye;
    View_Ciao *ciao;
    UIViewController *currentView;
    UIWindow *window;
}
... IBOutlet properties for the 3 controllers.
@end

@implementation AppDelegate
- (void)switchToGoodbye
{
    [currentView.view removeFromSuperview];
    [window addSubview:goodbye.view];
    currentView = goodbye;
}
... etc.
@end

您可能需要在将视图添加到窗口之前调整视图大小,然后在currentView和新视图控制器上调用viewWillDisappear:viewDidDisappear:viewWillAppear:viewDidAppear:在他们被删除/添加之后。