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

问题描述 投票:3回答:3

我没有使用标签栏或任何其他控件 - 我想基本上将当前视图动态地更改为不同的视图控制器(即通过代码)。我根本不使用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];
}
iphone uiviewcontroller
3个回答
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:


2
投票

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

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.