IOS開發之擷取Storyboard建立的ViewController,ios開發storyboard
前面的兩篇部落格都是學習有關螢幕適配也就是相對布局的東西,這篇部落格中將會學習視圖間的切換。視圖間的切換我們可以用程式碼完成或者用storyboard來建立各個視圖控制器間的關係。在需要用到代碼進行切換時會用代碼進行視圖間的跳轉。下面的東西我們會主要介紹到NavigationController來進行視圖間的切換。下面也是和之前一樣把代碼和storyboard結合起來學習。
下面介紹一下我們要實現的功能和效果: App開啟的第一個介面是登陸頁面,登陸頁面由使用者名稱和密碼以及一個登陸按鈕構成。當登陸成功時會push到第二個頁面,第二個頁面有三個按鈕,A,B和C, 點擊不同的按鈕然後會跳轉到相應的View。
1.首先我們先用我們的storyboard來拖拽出我們要用的控制項,再添加一個NavigationController,下面圖一是給我們的主視圖添加NavigatinController, 圖二是最終效果
2.因為要由登陸狀態來判斷下面的View是否出現,所以主視圖和帶有A,B,C三個按鈕的視圖之間的切換不能用storyboard實現,我們要用代碼關聯實現。下面是登陸成功後要跳轉的模組:
3.以上拖拽工作到此結束,下面要實現我們的商務邏輯和相關性檢視之間的關係,為了相關性檢視時能找到帶有三個按鈕的視圖,我們需要設定一下該視圖的StoryboardID,入
4.下面來編寫我們的代碼,上面我們用到了TextField,我們需要處理鍵盤的回收事件,所以我們的ViewController要遵守UITextFiledDelegate協議,實現有關鍵盤的方法
(1)遵守UITextFieldDelegate協議
| 1234 |
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelegate>@end |
(2)在ViewController.m中中進行回調註冊和實現協議中相應的方法,代碼如下:
| 1234567891011121314 |
-(BOOL) textFieldShouldReturn:(UITextField *)textField{ [self.userName resignFirstResponder]; [self.password resignFirstResponder]; return YES;} - (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.userName.delegate = self; self.password.delegate = self;} |
5.處理完鍵盤的事兒,就該處理我們當登陸按鈕點擊時回調的事件了,首先在回調方法中擷取TextFiled的值,由值的情況來實現是否進行頁面間的切換。 在頁面切換時我們得關聯兩個頁面中的關係。
| 12345678910111213141516171819 |
- (IBAction)tapButton:(id)sender { NSString *username = self.userName.text; NSString *password = self.password.text; if ([username isEqualToString:@"admin"] && [password isEqualToString:@"admin"]) { //擷取storyboard: 通過bundle根據storyboard的名字來擷取我們的storyboard, UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; //由storyboard根據myView的storyBoardID來擷取我們要切換的視圖 UIViewController *myView = [story instantiateViewControllerWithIdentifier:@"myView"]; //由navigationController推向我們要推向的view [self.navigationController pushViewController:myView animated:YES]; } } |
代碼說明:關聯兩個View需要三部
1.擷取storyboard: 通過bundle的名擷取bundle, 在通過storyborad的名字來擷取我們的storyboard;
2.在由storyboard擷取storyboardID是myView的View;
3.執行由當前View推向我們擷取到的myView;
至此我們的主要代碼就編寫完成,接下來看一下運行效果吧:
先簡單的說這些吧,以後學到了新的內容在更新部落格內容,歡迎批評指正。
iOS開發中獲得storyboard中viewcontroller案例的問題
對象的本質是:功能的封裝及狀態的維護,說白了就是代碼和資料。雖然使用同一個nib來建立出來的執行個體,但它們卻不是同一個指標指向的對象。如果想要區分完全可以通過添加屬性如instanceName 在建立時指定這個instanceName為不同的值就可以了
a.instanceName=@"A";
next.instanceName=@"Next";
怎麼判斷是不是你想要的執行個體就不用我多說了吧
iOS 用storyboard開發時,怎在一個viewController 擷取到指定的其他viewController
UITableViewController *startingTableController=[self.storyboardinstantiateViewControllerWithIdentifier:@"UITableViewController"];
[self.view addSubview:startingTableController.view];
//instantiateViewControllerWithIdentifier:為你在表單設計時的屬性中定義命名的Identifier(標示符);
//[self.storyboardinstantiateViewControllerWithIdentifier:@"UITableViewController"];它將返回一個控制器對象
//[self.view addSubview:startingTableController.view];將控制器視圖添加進主視窗視圖,這樣做的不足之處是顯示有一點空白,貌似是
startingTableController工作列缺失導致的
將[self.view addSubview:startingTableController.view];
換為
NSArray *viewController=[NSArray arrayWithObject:startingTableController];
[self.pageViewController setViewControllers:viewControllerdirection:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
可以解決空白問題