3

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

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

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

View_Hello.m(和 .h)

View_Goodbye.m(和 .h)

View_Ciao.m(和 .h)

我们的 ViewerAppDelegate 将启动 View01_Hello。

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

关于我如何做到这一点的任何想法(请不要说“哦,您需要在此示例中使用 xxx 界面元素”。我需要能够在应用程序的视图中基于程序控制随机更改视图正在努力)

过去一周我一直在浏览 Google 和 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];
}

这崩溃了。:-)

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

编辑(@丹尼尔迪克森)

太棒了——成功了!

- (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];
}
4

3 回答 3

2

你看过 Erica Sadun 的iPhone Developer's Cookbook中的食谱 2-8 “Swiping Views”吗?她使用 touchesBegan 和 touchesMoved 来确定滑动方向,然后根据 touchesEnded 中的方向设置动画。

您可以扩展或修改它以添加点击检测以确定要转换到哪个视图。无论如何,如果您想看一下,食谱在第 69 页或附近。这里还有一个视频 (mov) 示例和一个代码示例。

于 2009-04-09T23:46:19.713 回答
1

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

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

于 2009-04-09T20:12:13.207 回答
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

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

于 2009-04-09T21:34:53.337 回答