斯坦福大學IOS開發課程筆記(第七課第一部分)

來源:互聯網
上載者:User

標籤:斯坦福大學   ipad應用   uiviewcontroller   delegate   splitview   

 

轉載請註明出處

http://blog.csdn.net/pony_maggie/article/details/31462099


作者:小馬


這節課的內容太多,分兩部分介紹。本節課主要是介紹如何開發基於ipad的應用程式,涉及到了一些只有ipad才有的類,介面等。

 


先講到UIToolbar工具列,常用的UI控制項。在工具列上按鈕一樣的東西叫UIBarButtonItems,可以像一般按鈕一樣操作它,比如建立outlet,action等。使用的時候只要從工具箱裡拖到視圖中就可以了,當然如果你想動態控制,用代碼實現也是沒問題的,第二部分的demo程式就會涉及到這一點。

 


看到的UI效果叫分屏視圖(split view),有一個控制器類叫UISplitViewController。 這個是只在ipad應用下才有的,也就是你建立工程時,要選擇ipad或universal應用,才可以使用這個類。當然這個視圖控制項也只有在基於ipad的storyboard(一個工程可以有多個storyboard,後面的程式碼範例會看到這個用法)中才可以拖出來使用。應該可以理解為只有ipad才有這樣的控制項,畢竟螢幕比較大這樣的顯示效果才有意義。

 

 


既然是分屏,左邊的叫全域欄(master),右邊的叫細節欄(detail)。UISplitViewController本身有個NSArray類型屬性叫viewControllers,數組第一個元素是master,第二個是detail。

 

 


分屏視圖和代理(delegate)是永遠不分家的,如果沒有代理你會發現ipad豎屏時,左側邊欄會消失,你無法從任何地方開啟它(正常情況下,是要有個toolbar上的按鈕,按一下,左側邊欄會出現)。 這個在後面的程式碼範例中,我還會講到。

 

這裡既然提到ipad豎屏, 就多說一些,分屏視圖在轉到豎屏時,有兩種顯示方案,一是上面提到的左側邊欄消失,不過會在toolbar上放一個button,按一下就可以以Popover(後面會介紹)的形式彈出來。還有一種是左右同時顯示,但是要”擠壓”一下,就像ipad裡的設定功能的UI一樣。具體用哪一種還是要根據實際開發的功能以及顯示效果。

 

 

 




我們一次講完上面三幅圖,說的是同一個函數,

(BOOL)splitViewController:(UISplitViewController*)sender  shouldHideViewController:(UIViewController *)master             inOrientation:(UIInterfaceOrientation)orientation

這個函數控制左側邊欄在不同方向是否隱藏。從三張圖可以看到不同實現的顯示效果,很容易理解,不多說。

 

 

 

控制左側邊欄如何顯示需要用到代理,當前視圖控制器把自己作為代理,並實現

UISplitViewControllerDelegate

這個協議裡的一些方法, 上面提到的那個方法就是其中之一,當然還有其它方法,如下:

//左側邊欄將要隱藏時調用(比如由橫屏轉到豎屏)- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc{    //做兩件事    //一,把工具列上按鈕的title設定成self.title(這裡是"doctor")    //二,把按鈕放到工具列上,這個任備要由右側邊欄完成,因為這個時候只有右側邊欄是顯示的。        barButtonItem.title = self.title;    [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;        }//左側邊欄將要顯示時調用(比如由豎屏轉到橫屏)- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{    //把工具列上的按鈕移除,因為左側邊欄顯示,所以不需要    [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;}


 

 


這裡說到如何更新細節欄,當全域欄變化時,可能要更新細節欄中的顯示,有兩種方法。一種是很直接的,用target/action,相當於一個響應事件,在處理函數裡設定就可以,如。還有一種不太常用,就是用segue, 這種方法其實相當於把整個原來的右側邊欄視圖換掉,載入一個新的視圖。相當少用。不過後面的程式碼範例中,會用到這一點,要留意。

 

 

 

這裡講到快顯視窗(popover)的一些屬性,如何設定等,還有就是如何改變快顯視窗的預設行為,比如預設情況下,popover是在使用者觸摸到它的地區已外時會自動關閉,可以改變這種行為。比較簡單。


 第二部分會詳細講解程式碼範例。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.