以编程方式切换自定义视图(推送和弹出)

时间:2011-08-09 18:16:07

标签: iphone view uinavigationcontroller switch-statement

在iOS中,我的观点可以单独使用,但我无法在它们之间切换。

现在经过大量的谷歌搜索后,我很喜欢基于导航的应用程序可以很好地用于视图堆栈。问题是我的所有视图都是nib / xib-less并且在源代码中定制了自定义。因此,我需要自己的UINavigationController,手动/代码推送和弹出视图。由于每个教程都是nib / xib和IB绑定的,或者仅仅是一段代码片段,我需要一个具体的例子来完成它。

一个简单的示例,其中包含2个以编程方式创建的视图(可以为空,只需使用loadView而不是使用nib / xib进行初始化)和工作堆栈(推送和弹出视图,如:加载应用,创建一些根查看如果需要,推送一个视图,然后从该视图推送第二个视图,然后弹出它们)将是非常棒的,或者至少是一个教程,使用整个项目源而不是片段。

提前致谢。

编辑:经过一些额外的思考后,再多一点澄清也不错。我的应用程序基本上由5或6个视图组成,这些视图将从其各自的先前视图中调用,即深入分析应用程序。

1 个答案:

答案 0 :(得分:4)

这是一个简短的代码,只有基本部分:

CodeViewsPushingAppDelegate.m

#import "CodeViewsPushingAppDelegate.h"
#import "ViewNumberOne.h"
@implementation CodeViewsPushingAppDelegate

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    UINavigationController *navController = [[UINavigationController alloc] init];
    ViewNumberOne *view1 = [[ViewNumberOne alloc] init];
    [navController pushViewController:view1 animated:NO];
    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

ViewNumberOne.h

#import <UIKit/UIKit.h>

@interface ViewNumberOne : UIViewController
{
    UIButton *button;
}

- (void)pushAnotherView;

@end

ViewNumberOne.m

#import "ViewNumberOne.h"
#import "ViewNumberTwo.h"
@implementation ViewNumberOne

- (void)loadView
{
    [super loadView];
    button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(110, 190, 100, 20);
    [button setTitle:@"Push Me!" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(pushAnotherView) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)pushAnotherView;
{
    ViewNumberTwo *view2 = [[ViewNumberTwo alloc] init];
    [self.navigationController pushViewController:view2 animated:YES];
    [view2 release];
}

ViewNumberTwo.h

#import <UIKit/UIKit.h>

@interface ViewNumberTwo : UIViewController
{
    UILabel *label;
}

@end

ViewNumberTwo.m

#import "ViewNumberTwo.h"

@implementation ViewNumberTwo

- (void)loadView
{
    [super loadView];
    label = [[UILabel alloc] init];
    label.text = @"I am a label! This is view #2";
    label.numberOfLines = 2;
    label.textAlignment = UITextAlignmentCenter;
    label.frame = CGRectMake(50, 50, 200, 200); //whatever
    [self.view addSubview:label];
}