通俗點講,看得見、摸得著的就是UIView。貼上UIKit 和 UIView 的關(guān)系圖:


UI組件使用
- UIView
- UIButton UIControl
- UIImageView UILabel
- UIAlertView UIActionSheet
- UITextField UITextView
- UIProgressView
- UISwitch UISlider UISegmentedControl
- UIScrollView
- UIPageView
- UIWebView
- UIBarButtonItem
- UIToolBar
- UIActivityIndicatorView
- UITableView
UIButton:
UIButton *pushButton = [UIButton buttonWithType:UIButtonTypeCustom];
如果你不想使用類方法創(chuàng)建也是可以的:
pushButton = [[UIButton alloc] init];
在設(shè)置 UIButton 組件的背景色時, 會經(jīng)常設(shè)置 clearColor 這個顏色。
有時,我們在為 button 設(shè)置背景圖片的時候,會因為圖片大小的關(guān)系,導致出來的效果失真、不協(xié)調(diào)。解決方法一是讓UI設(shè)計師制作一個大小合規(guī)的圖片,另一種方法就是手動代碼對圖片進行拉伸:
UIImage *blueBGImage = [UIImage imageNamed:@"blueButton.png"];
UIImage *stretchableBlueBGImage = [blueBGImage stretchableImageWithLeftCapWidth:10 topCapHeight:20];
當使用 stretchableImageWithLeftCapWidth: topCapHeight: 方法進行拉伸的時候,它拉伸圖片的直線部分,因此不會造成圖片的失真(失真的效果就是本來圖片時一個四角圓潤的長方體,拉伸之后成為了橢圓形狀)。方法的意思是分別從圖片左上角往右和往下 ?points(同樣會映射到圖片從右往左,從下往上的部分,能保證圖片四角都照顧到) 進行拉伸,只要確保輸入的數(shù)字是在直線段,拉伸的效果就不會失真了。(主要是這個方法可以保證圖片的四個角不會變化)注意,這個方法最后會生成一個新的圖片,使用時注意選擇。`
[pushButton SetBackgroundImage:stretchableBlueBGImage
forState:UIControlStateNormal];
當你希望在點擊一個button之后,上面的title會發(fā)生變化,變成另外的文字,可以這樣設(shè)置:
[presentButton setTitle:@"present modal view" forState:UIControlStateNormal];
[presentButton serTitle:@"clicked!" forState:UIControlStateHighlighted];
??上面兩行代碼,表示button在沒有點擊的時候,顯示的title是present modal view,在點擊之后沒松開按鈕的情況下title顯示的是clicked!.
看下面一段代碼:
[pushButton addTarget:self
action:@selector(pushButtonClicked:)
forControlEvents:UIControlEventTouchUpInside];
其中 addTarget: 參數(shù)代表執(zhí)行的是誰。action:參數(shù)代表執(zhí)行的是什么方法。至于為什么要在 pushButtonClicked 后面加冒號,是因為一般在這個方法名中都帶有參數(shù),所以都要加冒號(而參數(shù)一般就是本身)。一般我們會使用 UIControlEventTouchUpInside 這個點擊事件,它是點擊之后松開才會觸發(fā)事件響應,這樣會給誤操作的用戶一個修正的機會。直接按下就執(zhí)行的方法是touchDown.
??看下面的一段代碼:
設(shè)置宏可以保證代碼的可讀性(寫在代碼前面),即下面代碼前兩行。
#define kPushButtonTag 101
#define kPresentButtonTag 102
pushButton.tag = 100;
presentButton.tag = 200;
- (void)pushButtonClicked:(id)sender
{
if (sender.tag == kPresentButtonTag) {
} else if (sender.tag == kPushButtonTag) {
}
}
- (void)presentButtonClicked:(id)sender
{
}
現(xiàn)在我們來介紹一下方法中帶參數(shù)的作用??瓷厦娴囊欢未a,有兩個 selector 的方法,假設(shè)一種情況 :selector 的方法都指向一個同樣的方法名例如 pushButtonClicked: 。如果需要做判斷,就可以根據(jù)傳入的button參數(shù)來判斷。那么我們可以通過參數(shù)來獲得各個button在提前設(shè)置的tag值來作出判斷,選擇使用哪一個方法。還存在一種情況,當代碼太多的時候,我們找不到tag值,這時我們可以預先定義一個宏,如上面代碼的第一和第二行的內(nèi)容,這樣代碼就更具有可讀性(宏名前帶k表示常量,這只是一種習慣 ,還有的程序員習慣宏名全部大寫,我們注重代碼可讀性簡潔即可)。