Navigation通常与TableView搭配使用,博文iPhone开发常用控件之表TableView【一】 编写了一个TableView的示例,那是一个单视图应用,现在搭配上Navigation将其修改为多视图应用。
1,将TableView示例工程复制一份名称修改为TableViewDemo-Nav,打开该工程进行修改。
2、首先,修改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
3,修改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; }
4、新建视图控制器AppViewController(带xib),如下:
[img]
[/img]
5、ViewController.h修改后如下:
#import <UIKit/UIKit.h> #import "AppViewController.h" @interface ViewController : UIViewController @property(nonatomic,retain)NSMutableArray *apps; @property(nonatomic,retain)AppViewController *appViewController; @end
6、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]; }
7、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
8、注意:将输出口与AppViewController.xib中的UI控件相连。AppViewController.xib如下:
[img]
[/img]
9、AppViewController.m如下:
#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
10、运行效果如下:
[img]
[/img]
[img]
[/img]