IOS開發之擷取Storyboard建立的ViewController,ios開發storyboard

來源:互聯網
上載者:User

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];
可以解決空白問題
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.