2012年2月3日 星期五

Tutorial: 使用nib檔做為GUI元件

使用nib檔作為GUI的元件,不但易於排版,而且對於程式碼的管理上也很好。一個GUI元件在概念上也剛好是一個程式碼的物件(object),將它分拆出來有助於維持整體的簡潔。

看看Apple怎麼描述nib檔:
製作OS X及iOS的應用程式時,nib檔扮演著相當重要的角色。你可以透過Xcode用圖形的方式去建立及調整使用者介面,取代撰寫程式的方法。因為你可以立即看到改變的結果,所以能很快的測試不同版型及設定。並能不改寫任一行程式碼,即可修改大部份的使用者介面。 
對於採用AppKit或UIKit製作的應用程式,nib檔有額外的重要性。這兩個架構都支援使用nib檔來對windows, views及controls排版,並可以與程式碼整合。Xcode協助你連結使用者介面控制與迴饋的部份。這樣的整合有效減少nib檔讀入後的設定步驟,並且使你未來可簡單的改變程式碼與使用者介面的關係。  
from Resource Programming Guide, Apple 

以下簡單介紹使用nib檔來加入一個上傳指示元件:
CustomView.xib
這個nib檔裡面很簡單,有一個UIView,將它的class設為CustomView.h。UIView下面包含了一個UIActivityIndicatorView及UILabel(待會用IBOutlet將它們連結起來)。

CustomView.h / CustomView.m
很簡單,就只有兩個IBOutlet,以及一個define marco。使用Xcode將這兩個IBOutlet與CustomView.xib裡面拉好的版面連結起來即可。
ViewController.h / ViewController.m
將CustomView.xib載入。

13行 在 viewDidAppear: 的時候將nib檔載入。
17行 使用的方法是 NSBundle 的 loadNibNamed:owner:options:來載入。
20行 這個forin fast enumeration用來找出CustomView元件。
26行 將CustomView加入目前的view當中。
27行 讓UIActivityIndicatorView轉起來
28行 UILabel顯示為「Uploading 2 photo(s)...」 

若一切沒錯,即可發現一個轉動的UIActivityIndicatorView與「Uploading 2 photo(s)...」出現在螢幕上。

2012年2月1日 星期三

找目前顯示的UIViewController


UIViewController的category「TopViewController」。
  1. 透過遞迴的方式找到最上層的UIViewController
  2. 遞迴判斷的順序
    • 目前的UIViewController是否有presentedViewController?
      是 -> 由presentedViewController繼續遞迴
    • 是否包含於UINavigationController裡?
      是 -> 回傳UINavigationController的visibleViewController
    • 是否本身就是UINavigationController?
      是 -> 回傳visibleViewController
    • 以上皆非 -> 回傳self
分享於gist: