`

iPhone开发多视图技术总结之三:Navigation .

    博客分类:
  • ios
ios 
阅读更多
实现的功能:通过Navigation,实现多视图切换。这是使用最多的一种多视图实现方式。


关键词:多视图 Navigation UINagivationController



1、创建一个Empty Application工程,命名为:MultiView-Navigation,如下图
[img]

[/img]




2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器FirstViewController,如下图
[img]

[/img]




3、依照上步操作,新建视图控制器SecondViewController





4、修改AppDelegate.h,修改后如下:
#import <UIKit/UIKit.h>
#import "FirstViewController.h"
#import "SecondViewController.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UINavigationController *navigationController;//导航视图控制器对象
@end







5、修改AppDelegate.m,主要是修改didFinishLaunchingWithOptions方法,修改后如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    FirstViewController *firstViewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
    //初始化navigationController,将firstViewController作为根视图控制器
    navigationController = [[UINavigationController alloc]initWithRootViewController:firstViewController];//备注1
    [self.window addSubview:navigationController.view];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}







6、修改FirstViewController.h,添加goSecondView方法:
#import <UIKit/UIKit.h>
#import "SecondViewController.h"
@interface FirstViewController : UIViewController

-(void)goSecondView;
@end







7、修改FirstViewController.m,主要是修改initWithNibName及实现goSecondView方法:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.title = @"First View";
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"SecondView" style:UIBarButtonItemStyleBordered target:self action:@selector(goSecondView)];
        
    }
    return self;
}

-(void)goSecondView{
    SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    //跳转到secondViewController
    [self.navigationController pushViewController:secondViewController animated:YES];//备注2
}





8、视图控制器SecondViewController,仅修改SecondViewController.m中的initWithNibName方法,如下:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.title = @"SecondView";
    }
    return self;
}



09.} 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.title = @"SecondView";
    }
    return self;
}代码解释:

备注1:firstViewController被push到navigationController中。

备注2:self.navigationController的英文注释为:// If this view controller has been pushed onto a navigation controller, return it.

所以,self.navigationController返回的正是备注1中的navigationController。



9、编译、运行,效果如下:
[img]

[/img]
[img]

[/img]


10、Navigation通常与TableView搭配使用,一个单视图应用,现在搭配上Navigation将其修改为多视图应用。




11、将TableView示例工程复制一份名称修改为TableViewDemo-Nav,打开该工程进行修改。




12、首先,修改AppDelegate,添加UINavigationController的实例,AppDelegate.h修改后如下:

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;
//添加navigationController
@property (strong, nonatomic) UINavigationController *navigationController;
@end



修改AppDelegate.m中的didFinishLaunchingWithOptions方法,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    //注释掉下面一行代码
    /*
    self.window.rootViewController = self.viewController;*/
    //添加如下代码
    self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.viewController];
    [self.window addSubview:self.navigationController.view];
    
    [self.window makeKeyAndVisible];
    return YES;
}







13、新建视图控制器AppViewController(带xib),如下:

[img]

[/img]





14、ViewController.h修改后如下:
#import <UIKit/UIKit.h>
#import "AppViewController.h"
@interface ViewController : UIViewController

@property(nonatomic,retain)NSMutableArray *apps;
@property(nonatomic,retain)AppViewController *appViewController;
@end


ViewController.m中主要是实现了-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法,如下:

//实现didSelectRowAtIndexPath
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *imageName = [NSString stringWithFormat:@"%d",[indexPath row]+1];
    NSString *appName = [apps objectAtIndex:[indexPath row]];
    //初始化appViewController
    appViewController = [[AppViewController alloc]initWithNibName:@"AppViewController" bundle:nil];
    //传递参数
    appViewController.appName = appName;
    appViewController.appIconName = imageName;
    //跳转到appViewController
    [self.navigationController pushViewController:appViewController animated:YES];
}





15、AppViewController.h如下
#import <UIKit/UIKit.h>

@interface AppViewController : UIViewController

@property(strong,nonatomic)NSString *appName;
@property(strong,nonatomic)NSString *appIconName;

@property(strong,nonatomic)IBOutlet UILabel *appNameLabel;
@property(strong,nonatomic)IBOutlet UIImageView *appIconImgView;
@end



注意:将输出口与AppViewController.xib中的UI控件相连。AppViewController.xib如下:

[img]

[/img]

#import "AppViewController.h"

@interface AppViewController ()

@end

@implementation AppViewController
@synthesize appName;
@synthesize appIconName;
@synthesize appNameLabel;
@synthesize appIconImgView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = @"AppViewController";
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    self.appNameLabel.text = appName;
    self.appIconImgView.image = [UIImage imageNamed:appIconName];
    
    NSLog(@"appName=%@,appIconName=%@",appName,appIconName);
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    appName = nil;
    appIconName = nil;
    appNameLabel = nil;
    appIconImgView = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end






16、运行效果如下:
[img]

[/img]     [img]

[/img]






  • 大小: 163.3 KB
  • 大小: 163.9 KB
  • 大小: 71.7 KB
  • 大小: 73.8 KB
  • 大小: 188.4 KB
  • 大小: 10.7 KB
  • 大小: 122.4 KB
  • 大小: 142.8 KB
分享到:
评论

相关推荐

    iPhone开发【十】多视图技术总结之二:Navigation

    在"iPhone开发【十】多视图技术总结之二:Navigation"中,博主可能详细讲解了以下几点: 1. **Navigation Bar**:导航控制器顶部的导航栏,显示了当前视图的标题,并且可以包含左侧和右侧的Bar Button Items,用于...

    iPhone开发常用icons(镂空图)

    本资源“iPhone开发常用icons(镂空图)”提供了一系列适用于iPhone应用的镂空图标,这些图标通常用于表示不同的功能或状态。镂空图标的独特之处在于其背景透明,可以更好地融入各种背景色,提升界面的美观性和一致性...

    iphone tabbar 中添加navigation

    描述中的"iphone控件嵌套开发table中嵌套navigation导航控件"进一步指出了在Table View(表格视图)中嵌套Navigation Controller的具体应用场景。 首先,`TabBar`是iOS的底部导航栏,它允许用户在多个主要功能之间...

    iphone 各种视图切换效果

    在iOS开发中,iPhone应用程序的用户体验往往离不开各种视图(View)之间的切换效果。这些效果不仅提升了用户界面的美观度,还能提供更好的交互体验。本文将深入探讨“iPhone各种视图切换效果”,并结合源码分析,...

    (0093)-iOS/iPhone/iPAD/iPod源代码-视图切换(View Transition)-Flip Card NavigationView

    本示例项目"(0093)-iOS/iPhone/iPad/iPod源代码-视图切换(View Transition)-Flip Card NavigationView"专注于提供一个独特的视图切换效果——翻转卡片(Flip Card)导航视图。这种效果不仅为用户提供了新颖...

    iPhone开发入门[归纳].pdf

    iPhone开发入门是一个对初学者非常友好的主题,涵盖了从创建项目到编写代码,构建和运行应用,以及优化性能的关键步骤。以下是对这些知识点的详细解释: 1. **创建iPhone项目**: - 使用Xcode,Apple的官方集成...

    ios开发视图布局(ViewLayout)效果源码分享[汇编].pdf

    以上这些视图布局技术和效果展示了iOS开发中丰富的交互设计和视图管理方式,它们能够极大地提升用户体验并增加应用的吸引力。开发者可以根据需求选择合适的布局技术,结合手势识别、动画效果和自定义视图,创建出独...

    Beginning.iPhone.SDK.Programming.with.Objective-C

    iPhone应用程序中的动画是提升用户体验的重要方式之一,书中介绍了各种开发动画的技巧,包括简单的视图动画到复杂的转场动画,帮助开发者为他们的应用程序增添动态效果。 以上这些知识点都是学习iOS开发不可或缺的...

    Apress.Beginning.iPhone.Development.Exploring.the.iOS.SDK.2014

    导航控制器与表格视图(Chapter 9: Navigation Controllers and Table Views)** - **导航控制器**: 介绍导航控制器的作用及其与表格视图的结合使用。 - **分层结构**: 如何通过导航控制器构建层次化的用户界面。 ...

    找地儿 iphone开发素材

    这个压缩包提供了“找地儿”iPhone应用的开发素材,这对于那些正在学习或从事iOS应用开发的人来说是一份宝贵的资源。下面将详细讨论这些素材以及它们在iOS开发中的作用。 首先,“找地儿”iPhone开发素材可能包含...

    iPhone UIKit详解源代码

    通过这份“iPhone UIKit详解源代码”,开发者不仅可以了解UIKit的基本用法,还能深入学习到iOS开发中的高级技巧,包括性能优化、内存管理、多线程等方面。这将有助于开发者构建出更加稳定、高效的iOS应用,提升用户...

    iPhone开发之TabBarController+NavigationController

    标题 "iPhone开发之TabBarController+NavigationController" 指的是将这两个控制器一起使用,以构建一个多页面、有导航功能的应用。在Mac10.7环境下进行开发,意味着我们使用的可能是Xcode 4.x系列,对应的iOS SDK...

    IPHONE 个人收藏类

    在开发过程中,开发者经常将Navigation Controller作为应用的根视图控制器,以便为用户提供一个统一的导航体验。 结合标签“IPHONE”,我们可以深入探讨iPhone平台的相关知识: 1. **iOS操作系统**:这是苹果公司...

    iPhone development tableView sample

    《深入探索iPhone开发:TableView与NavigationTableView实战》 在iOS应用开发中,UITableView是一个至关重要的组件,它用于展示数据集合并允许用户进行交互。而Navigation Controller则是构建层级导航界面的关键,...

    IPhone开发的点餐系统

    1. Tabbar Controller与 Navigation Controller的套用 2. TableViewCell 子视图添加UILabel和UIButton等 3. Quartz 2D 绘制自定义视图 4. 手势结合UIView Animation切换视图 5. CoreData 及其数据的初始化方法 6. ...

    iphone 应用开发实例之 nav table tar

    "iPhone应用开发实例之nav table tar"可能是指一个关于导航栏(Navigation Bar)与表格视图(Table View)结合使用的示例项目。这个实例是开发者学习和掌握iOS应用基础架构和界面设计的关键。 1. **导航栏...

    iphone开发基础UITabBar和UINavigation搭建简单应用

    iphone开发基础UITabBar和UINavigation搭建简单应用,适合初学者,学习tabbar和navigation,这里练习两者组合搭建一个简单的常见应用例子, 其实普通应用也就是tabbar作为根视图,每个tab又是一个navigation的根...

Global site tag (gtag.js) - Google Analytics