當前位置:編程學習大全網 - 源碼下載 - ios中xib能繼承storyboard上的導航欄嗎

ios中xib能繼承storyboard上的導航欄嗎

IOS:6.1

XCode:4.6

Storyboard(故事板)是XCode4.2才開始支持的,為了使設計View更容易。盡管用以前的nib(xib)拖拖拽拽也沒問題,不過卻需要在各種文件之間來回切換,對於初學者很容易崩潰。Storyboard在這方面改進了不少,基本上只要在storyboard界面就可以完成壹切,尤其是View導航,可以不編寫壹行代碼就可以搞定。盡管storyboard在實現View導航方面要比xib更容易使用,不過對於初學者來說仍然有壹些難度,因此本文及後面幾篇文章會詳細介紹如何使用storyboard實現各種類型的導航。

本文會介紹壹種最簡單的導航方式,也就是單擊當前View的壹個Button,會跳到另外壹個View上,並且向這個View傳遞數據。

首先在XCode中建立壹個“SingleView Application”類型工程,主要要選擇“Use Storyboard”和“Use Automatic Reference Counting”,這樣就可以使用ARC了,也會自動建立壹個storyboard。工程名是StoryboardDemo1。

接下來再建立壹個Objective-CClass,類名為MyViewController,註意Superclass為UIViewController,並且下面兩個復選框都不要選中,因為這裏不需要XIB文件。如果按著這些步驟做,最後StoryboardDemo1工程的目錄結構如圖1所示。

圖1

接下來要做的是打開MainStoryboard.storyboard文件,會看到界面上有壹個默認的View。這是根視圖,也就是說程序運行會首先要顯示該視圖。由於本文的目的是實現導航,而IOS規定所有參與導航的視圖必須由UINavigationController控制。所以還需要在storyboard上加壹個UINavigationController,並且程序的入口由View變成了UINavigationController。完成這項工作的方法很多,先來看壹個超級無敵簡單的方法,就是選中storyboard默認的View,然後點擊“Editor”>“Embed In”>“Navigation Controller”菜單項,XCode就會自動在storyboard上生成壹個UINavigationController,並更改啟動入口。最終storyboard的效果如圖2所示。

圖2

除了這種簡單的方法,還可以直接從控件面板上拖壹個UINavigationController控件,不過默認這個控件還帶了壹個UITableViewController。這個東西並不需要,所以可以刪除UITableViewController。然後選中storyboard中的UINavigationController,並按住ctrl鍵,然後拖動鼠標到默認視圖上,這時會彈出壹個菜單,選擇最下面的“root view controller”,最後的效果與圖2完全壹樣。當然,為了顯示自己有極客範,也可以在storyboard上放壹個UINavigationController控件後,進入storyboard的源代碼文件(xml格式的文件),找到默認視圖的聲明代碼,其實也很好找,只要設置了默認視圖導航條的標題,就會在這段代碼的頂端出現壹行註釋,如圖3所示。我們要找的就是<viewController>標簽的id屬性值。該屬性值唯壹標識了默認視圖,在當前storyboard配置文件中不會重復。

圖3

接下來尋找導航條(UINavigationControlle)的聲明代碼,也可以根據自動生成的註釋,如圖4所示。

圖4

我們只關心<navigationController>標簽中的<connections>標簽的destination屬性值,<connections>標簽標示當前的導航控制器直接與哪個視圖連接,也就是導航控制器中的第壹個視圖。只要將該屬性值改成默認視圖的id屬性值即可。當然,該屬性值默認是指向UITableViewController的id屬性值的。

接下來雙擊默認視圖上面的導航條,輸入標題文本“首頁”,並在默認視圖上放置壹個Button,Title為“顯示新視圖”。

下面在storyboard上再放壹個ViewController,並且在View上放置壹個UITextField控件(可以放任何控件,這裏只是為了演示方便),

盡管多個View會放到壹個storyboard中,但不同的View會使用不同的源代碼文件,在前面已經建了壹個MyViewController類,所以這個新的View會使用MyViewController類。然後需要將這個View與MyViewController類關聯。選擇ViewController,在右側面板中選擇第3個按鈕,設置MyViewController,如圖5所示。

圖5

接下來為UITextField在MyViewController.h文件中設置Outlet(名為textField,用於引用該控件)。

現在選擇默認視圖上的button,然後按住ctrl鍵,拖動鼠標到新放置的視圖(上面有UITextField控件的視圖),會彈出壹個菜單,選中“push”,其他的選項不能用於這種導航方式。

到現在為止,storyboard上***有壹個導航控制器和兩個視圖控制器,連接關系如圖6所示。

圖6

現在就可以運行程序了,然後點擊“顯示新視圖”按鈕,就可以切換到新視圖,並且在新視圖左上角會顯示壹個導航按鈕,點擊會返回“首頁”視圖。

還有壹個問題,如何在兩個視圖直接傳遞數據呢?當然可以用全局變量或靜態變量,不過這些方式有些不妥(全局和靜態變量用多了不是什麽好事)。

這裏介紹壹種通過prepareForSegue:方法傳遞數據的方法,由於默認視圖對應的源代碼文件是ViewController.m,所以在該文件中實現prepareForSegue:方法,代碼如下:

[plain] view plaincopy

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

// 判斷啟動的目標View是否為MyViewController

if([[segue destinationViewController] class] == [MyViewController class])

{

MyViewController *myView = [segue destinationViewController];

[myView setText:@"李寧"];

}

}

當導航到MyViewController之前(已經創建了MyViewController對象,但還沒調用MyViewController.viewDidLoad方法)系統會調用prepareForSegue:方法。並且可以通過[seguedestinationViewController]方法獲取目標視圖的對象,並調用視圖對象中的方法設置任何的參數值。這裏在MyViewController.m中實現了setText方法,用於設置mText變量,然後在MyViewController.viewDidLoad方法中通過mText變量值設置UITextField控件的顯示文本。

除了可以通過[seguedestinationViewController]方法判斷目標視圖外,還可以使用下面的代碼。

[plain] view plaincopy

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

if([segue.identifier isEqualToString:@"myview"])

{

MyViewController *myView = [segue destinationViewController];

[myView setText:@"李寧"];

}

}

其中segue.identifier表示導航連接的標識,也就是單擊圖6中新視圖和默認視圖直接連線中間的圓圈後,在右側的Identifier文本框的值,如圖7所示。

圖7

現在運行程序,當導航到新視圖後UITextField控件中的文本就會變成“李寧”了。

  • 上一篇:建站,辦網站,流程
  • 下一篇:我做了壹個網站。誰能幫我弄個網站啟動書?
  • copyright 2024編程學習大全網