UITabBarController 標籤視圖控制器 (傳值方式: 屬性, 代理, 單例, block) app
UINavigationController, 導航控制器, 用於管理具備層級關係的視圖控制器 ide
UINavigationBar, 導航欄, 只有一個, 多個視圖控制器共用一個 atom
UINavigationItem, 每個視圖控制器都有一個, leftBarButtonItem(s), title(titleView), rightBarButtonItem(s) spa
UITabBarController, 標籤控制器, 繼承於UIViewControlller, 用於管理具備平級關係的視圖控制器3d
UITabBarController *tabBC = [[UITabBarController alloc] init]; tabBC.delegate = self; OneViewController *oneVC = [[OneViewController alloc] init];
UITabBarItem,用於管理標籤欄上的圖片和文字的展現, 繼承於UIBarItem代理
TabBarController.m #import "TabBarController.h" #import "HomeViewController.h" #import "SearchViewController.h" #import "CategoryViewController.h" #import "SettingViewController.h" @interface TabBarController () @end @implementation TabBarController - (void)viewDidLoad { [super viewDidLoad]; 被UINavigationController管理的視圖控制器, 具備UINavigationItem 被UITabBarController管理的視圖控制器, 具備UITabBarItem //主頁 HomeViewController *homeVC = [[HomeViewController alloc] init]; UINavigationController *homeNavC = [[UINavigationController alloc] initWithRootViewController:homeVC]; homeNavC.tabBarItem.title = @"主頁"; homeNavC.tabBarItem.image = [[UIImage imageNamed:@"Home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; homeNavC.tabBarItem.selectedImage = [UIImage imageNamed:@"Home1"] ; //搜索 SearchViewController *searchVC = [[SearchViewController alloc] init]; UINavigationController *searchNavC = [[UINavigationController alloc] initWithRootViewController:searchVC]; searchNavC.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:(UITabBarSystemItemSearch) tag:100]; //分類 CategoryViewController *categoryVC = [[CategoryViewController alloc] init]; UINavigationController *categoryNavC = [[UINavigationController alloc] initWithRootViewController:categoryVC]; categoryNavC.tabBarItem.title = @"分類"; categoryNavC.tabBarItem.image = [[UIImage imageNamed:@"category"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; categoryNavC.tabBarItem.selectedImage = [UIImage imageNamed:@"category"] ; //設置 SettingViewController *settingVC = [[SettingViewController alloc] init]; UINavigationController *settingNavC = [[UINavigationController alloc] initWithRootViewController:settingVC]; settingNavC.tabBarItem.title = @"設置"; settingNavC.tabBarItem.image = [[UIImage imageNamed:@"setting2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; settingNavC.tabBarItem.selectedImage = [UIImage imageNamed:@"setting3"]; //設置tabBarController管理的視圖控制器 self.viewControllers = @[homeNavC, searchNavC, categoryNavC, settingNavC]; //釋放 [homeVC release]; [homeNavC release]; [searchVC release]; [searchNavC release]; [categoryVC release]; [categoryNavC release]; [settingVC release]; [settingNavC release]; }
屬性傳值code
HomeViewController.m #import "HomeViewController.h" #import "NextViewController.h" #import "Singleton.h" @interface HomeViewController () @property (nonatomic, retain) UITextField *textField; @end @implementation HomeViewController - (void)dealloc { [_textField release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:0.948 green:1.000 blue:0.408 alpha:1.000]; self.navigationItem.title = @"主頁"; //添加一個Button UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; button.frame = CGRectMake(0, 0, 200, 200); button.center = self.view.center; [button setTitle:@"GO" forState:UIControlStateNormal]; button.titleLabel.font = [UIFont systemFontOfSize:50]; [button addTarget:self action:@selector(next) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 175, 40)]; self.textField.borderStyle = UITextBorderStyleRoundedRect; self.textField.placeholder = @"請輸入內容"; [self.view addSubview:_textField]; [_textField release]; self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"取值" style:UIBarButtonItemStylePlain target:self action:@selector(getValue)] autorelease]; } - (void)getValue { Singleton *singleton = [Singleton sharedSingleton];
單例傳值 self.textField.text = singleton.string; } - (void)next { NextViewController *nextVC = [[NextViewController alloc] init];
屬性傳值 nextVC.string = self.textField.text; [self.navigationController pushViewController:nextVC animated:YES]; [nextVC release]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
NextViewController.h #import <UIKit/UIKit.h> @interface NextViewController : UIViewController @property (nonatomic, retain) NSString *string; @end
NextViewController.m #import "NextViewController.h" @interface NextViewController () @end @implementation NextViewController - (void)dealloc { [_string release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.682 blue:0.933 alpha:1.000];
屬性傳值 self.navigationItem.title = self.string; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
代理傳值orm
SearchViewController .m #import "SearchViewController.h" #import "DetailViewController.h" @interface SearchViewController ()<DetailViewControllerDelegate> @end @implementation SearchViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"搜索"; self.view.backgroundColor = [UIColor colorWithRed:0.757 green:1.000 blue:0.522 alpha:1.000]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemPlay) target:self action:@selector(play)]; } - (void)play { DetailViewController *detailVC = [[DetailViewController alloc] init]; detailVC.delegate = self; [self.navigationController pushViewController:detailVC animated:YES]; [detailVC release]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - DetailViewControllerDelegate - (void)passString:(NSString *)string { self.navigationItem.title = string; } @end
DetailViewController.h #import <UIKit/UIKit.h> @protocol DetailViewControllerDelegate <NSObject> - (void)passString:(NSString *)string; @end @interface DetailViewController : UIViewController @property (nonatomic, assign) id<DetailViewControllerDelegate> delegate; @end
DetailViewController.m #import "DetailViewController.h" @interface DetailViewController () @property (nonatomic, retain) UITextField *textField; @end @implementation DetailViewController - (void)dealloc { [_textField release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.745 blue:0.791 alpha:1.000]; self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 175, 40)]; self.textField.borderStyle = UITextBorderStyleRoundedRect; self.textField.placeholder = @"請輸入內容"; [self.view addSubview:_textField]; [_textField release]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if ([_delegate respondsToSelector:@selector(passString:)]) { [_delegate passString:_textField.text]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
單例傳值blog
Singleton.h #import <Foundation/Foundation.h> @interface Singleton : NSObject @property (nonatomic, retain) NSString *string; + (Singleton *)sharedSingleton; @end
Singleton.m #import "Singleton.h" @implementation Singleton - (void)dealloc { [_string release]; [super dealloc]; } + (Singleton *)sharedSingleton { static Singleton *singleton = nil; if (singleton == nil) { singleton = [[Singleton alloc] init]; } return singleton; } @end
CategoryViewController .m #import "CategoryViewController.h" #import "Singleton.h" @interface CategoryViewController ()<UITextFieldDelegate> @property (nonatomic, retain) UITextField *textField; @end @implementation CategoryViewController - (void)dealloc { [_textField release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:0.720 green:1.000 blue:0.837 alpha:1.000]; self.navigationItem.title = @"分類"; self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 175, 40)]; self.textField.borderStyle = UITextBorderStyleRoundedRect; self.textField.placeholder = @"請輸入內容"; self.textField.delegate = self; [self.view addSubview:_textField]; [_textField release]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - UITextFieldDelegate - (BOOL)textFieldShouldReturn:(UITextField *)textField { Singleton *singleton = [Singleton sharedSingleton]; singleton.string = textField.text; [textField resignFirstResponder]; return YES; } @end
Block傳值繼承
Block傳值: 用於從後一個頁面向前一個頁面傳值
後一個頁面
1.對Block類型重命名
2.寫Block屬性
3.在合適的地方調用block, 而且傳值
前一個頁面
1.爲block賦值, 並使用傳過來的值
Block類型
參數的個數由傳值的個數決定, 參數的類型由傳值的類型決定
void (^)(NSString *)
ViewController.h
重命名類型, 方便使用 typedef void (^BlockType)(NSString *string); @interface ViewController : UIViewController 默認block是建立在棧區的, 使用copy能夠把棧區block拷貝到堆區 @property (nonatomic, copy) BlockType block; 自動書寫block, 爲block賦值 - (void)passValue:(BlockType)block;
ViewController.m #import "ViewController.h" @interface ViewController () @property (nonatomic, retain) UITextField *textField; @end @implementation ViewController - (void)dealloc { [_textField release]; [_block release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:0.985 green:0.505 blue:1.000 alpha:1.000]; self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 175, 40)]; self.textField.borderStyle = UITextBorderStyleRoundedRect; self.textField.placeholder = @"請輸入內容"; [self.view addSubview:_textField]; [_textField release]; void(^helloWorld)() = ^() { NSLog(@"Hello World!"); }; helloWorld(); } -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.block(self.textField.text); } - (void)passValue:(BlockType)block { self.block = block; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
SettingViewController.m #import "SettingViewController.h" #import "ViewController.h" @interface SettingViewController () @end @implementation SettingViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:0.701 green:0.716 blue:1.000 alpha:1.000]; self.navigationItem.title = @"設置"; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]; [self.view addGestureRecognizer:tap]; [tap release]; } - (void)tap { ViewController *viewVC = [[ViewController alloc] init]; // viewVC.block = ^(NSString *string){ // self.navigationItem.title = string; // }; [viewVC passValue:^(NSString *string) { self.navigationItem.title = string; }]; [self.navigationController pushViewController:viewVC animated:YES]; [viewVC release]; }