UIButton 是一個(gè)非常實(shí)用的控件,在我們以后的開發(fā)生涯中他是不可或缺的菇民。
下面我們一起來學(xué)習(xí)UIButton吧>⌒ā!第练!
UIButton 簡介
UIButton是一個(gè)可以相應(yīng)事件的控件阔馋,因此他的直接父類是UIControl而不是UIView〗刻停總所周知所有能顯示數(shù)據(jù)的都是UIView呕寝,所以我的按鈕他也是一個(gè)UIView,只不過是通過UIControl繼承而來的婴梧。
基本屬性
對象的創(chuàng)建
UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
btn.frame = CGRectMake(50, 300, 50, 50);
[self.view addSubview:btn];
UIButton和其他的視圖不一樣下梢,因此他的創(chuàng)建不是簡單的alloc init,而需要通過類方法buttonWithType:
來創(chuàng)建志秃。這個(gè)方法接收的是一個(gè)按鈕樣式的枚舉值怔球,根據(jù)不同的枚舉
,創(chuàng)建不同樣式
的按鈕浮还;樣式枚舉詳解如下:
typedef NS_ENUM(NSInteger, UIButtonType) {
UIButtonTypeCustom = 0, // 自定義按鈕
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // 系統(tǒng)按鈕--當(dāng)前樣式被選中情況下竟坛,背景顏色會被改變
UIButtonTypeDetailDisclosure, // 藍(lán)色箭頭按鈕(用作詳
UIButtonTypeInfoLight, // 亮色感嘆號按鈕
UIButtonTypeInfoDark, // 深色感嘆號按鈕
UIButtonTypeContactAdd, // 加號按鈕
UIButtonTypeRoundedRect = UIButtonTypeSystem, // Deprecated, use UIButtonTypeSystem instead
};
因?yàn)槭褂玫氖欠椒▌?chuàng)建的,在創(chuàng)建的過程中沒有設(shè)置frame
,所以我們在創(chuàng)建后一定要自己手動設(shè)置
按鈕的frame
担汤,這個(gè)是必不可少的涎跨,frame很容易遺忘,所以大家要多注意下崭歧,少了frame按鈕將不顯示
隅很。
其他屬性
設(shè)置Button的標(biāo)題
對于按鈕的標(biāo)題不能通過屬性直接
設(shè)置,我們需要使用方法
來設(shè)置率碾;因?yàn)榘粹o他具有不同的狀態(tài)叔营,在不同的狀態(tài)下標(biāo)題也不一樣
,使用-setTitle: forState:
方法來設(shè)置在不同狀態(tài)下對應(yīng)的標(biāo)題,如下:
[btn setTitle:@"點(diǎn)我呀" forState:UIControlStateNormal];
UIControlStateNormal
是一個(gè)枚舉類型UIControlState
的枚舉值所宰, 代表的是按鈕在普通狀態(tài), 該枚舉的所有成員如下:
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0, // 正常狀態(tài)
UIControlStateHighlighted = 1 << 0, // 高亮狀態(tài)
UIControlStateDisabled = 1 << 1, // 失效狀態(tài)
UIControlStateSelected = 1 << 2, // 選中狀態(tài),是否選中需要手動設(shè)置
UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // 聚焦?fàn)顟B(tài) (iOS新加入 應(yīng)該和3D Touch有關(guān))
UIControlStateApplication = 0x00FF0000, // 當(dāng)用做應(yīng)用標(biāo)志時(shí)
UIControlStateReserved = 0xFF000000 // 框架預(yù)留 無意義
};
對于以上幾種狀態(tài)大家最好去一一試試绒尊,看看效果,只有試過仔粥,才能更理解
按鈕標(biāo)題相關(guān)
//標(biāo)題文本顏色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//標(biāo)題陰影顏色
[btn setTitleShadowColor:[UIColor redColor] forState:UIControlStateNormal];
//獲取某種狀態(tài)下的標(biāo)題
NSString *titleStr = [btn titleForState:UIControlStateSelected];
手動設(shè)置按鈕的選中狀態(tài)
btn.selected = NO;
設(shè)置按鈕的背景顏色
btn.backgroundColor = [UIColor redColor];
設(shè)置按鈕圖片
//設(shè)置按鈕前景圖片---不會被拉伸婴谱,原比例顯示, 會遮住按鈕標(biāo)題
[btn setImage:[UIImage imageNamed:@"btnIcon"] forState:UIControlStateNormal];
// 設(shè)置按鈕背景圖片---會被拉伸,充滿整個(gè)btn, 按鈕標(biāo)題會顯示在圖片之上
[btn setBackgroundImage:[UIImage imageNamed:@"btnBgImg"] forState:UIControlStateNormal];
設(shè)置按鈕的相關(guān)間距
//btn整體內(nèi)容四周的間距
btn.contentEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
//標(biāo)題四周間距
btn.titleEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
//圖片四周間距
btn.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
按鈕事件
添加按鈕響應(yīng)事件
//target: 執(zhí)行者
//action:被執(zhí)行的方法
//events:事件
//當(dāng)按鈕的的事件被觸發(fā)時(shí)躯泰,調(diào)用執(zhí)行者的被執(zhí)行方法--[self clickBtn:btn]
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
刪除按鈕響應(yīng)事件
//刪除的參數(shù)必須要添加時(shí)候的參數(shù)一樣谭羔,否則刪除不能成功
[btn removeTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
事件狀態(tài)詳解
UIControlEventTouchDown
單點(diǎn)觸摸按下事件:用戶點(diǎn)觸屏幕,或者又有新手指落下的時(shí)候麦向。
UIControlEventTouchDownRepeat
多點(diǎn)觸摸按下事件瘟裸,點(diǎn)觸計(jì)數(shù)大于1:用戶按下第二、三磕蛇、或第四根手指的時(shí)候景描。
UIControlEventTouchDragInside
當(dāng)一次觸摸在控件窗口內(nèi)拖動時(shí)十办。
UIControlEventTouchDragOutside
當(dāng)一次觸摸在控件窗口之外拖動時(shí)秀撇。
UIControlEventTouchDragEnter
當(dāng)一次觸摸從控件窗口之外拖動到內(nèi)部時(shí)。
UIControlEventTouchDragExit
當(dāng)一次觸摸從控件窗口內(nèi)部拖動到外部時(shí)向族。
UIControlEventTouchUpInside
所有在控件之內(nèi)觸摸抬起事呵燕,一般用于按鈕。
UIControlEventTouchUpOutside
所有在控件之外觸摸抬起事件(點(diǎn)觸必須開始與控件內(nèi)部才會發(fā)送通知)件相。
UIControlEventTouchCancel
所有觸摸取消事件再扭,即一次觸摸因?yàn)榉派狭颂嗍种付蝗∠蛘弑簧湘i或者電話呼叫打斷夜矗。
UIControlEventTouchChanged
當(dāng)控件的值發(fā)生改變時(shí)泛范,發(fā)送通知。用于滑塊紊撕、分段控件罢荡、以及其他取值的控件。你可以配置滑塊控件何時(shí)發(fā)送通知,在滑塊被放下時(shí)發(fā)送区赵,或者在被拖動時(shí)發(fā)送惭缰。
UIControlEventEditingDidBegin
當(dāng)文本控件中開始編輯時(shí)發(fā)送通知。
UIControlEventEditingChanged
當(dāng)文本控件中的文本被改變時(shí)發(fā)送通知笼才。
UIControlEventEditingDidEnd
當(dāng)文本控件中編輯結(jié)束時(shí)發(fā)送通知漱受。
UIControlEventEditingDidOnExit
當(dāng)文本控件內(nèi)通過按下回車鍵(或等價(jià)行為)結(jié)束編輯時(shí),發(fā)送通知骡送。
UIControlEventAlltouchEvents
通知所有觸摸事件昂羡。
UIControlEventAllEditingEvents
通知所有關(guān)于文本編輯的事件。
UIControlEventAllEvents
通知所有事件摔踱。
歡迎大家踴躍評論紧憾,讓我們一起探討技術(shù)!昌渤!
如果覺得文章不錯赴穗,請幫忙點(diǎn)擊文章下方的喜歡
!膀息!
你的支持將是對我最好的鼓勵, 謝謝0忝肌!潜支!