iOS UI基礎(chǔ)控件之UIButton

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忝肌!潜支!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甸赃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冗酿,更是在濱河造成了極大的恐慌埠对,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裁替,死亡現(xiàn)場離奇詭異项玛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弱判,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門襟沮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昌腰,你說我怎么就攤上這事开伏。” “怎么了遭商?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵固灵,是天一觀的道長。 經(jīng)常有香客問我劫流,道長巫玻,這世上最難降的妖魔是什么暑认? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮大审,結(jié)果婚禮上蘸际,老公的妹妹穿的比我還像新娘。我一直安慰自己徒扶,他們只是感情好粮彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姜骡,像睡著了一般导坟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上圈澈,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天惫周,我揣著相機(jī)與錄音,去河邊找鬼康栈。 笑死递递,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啥么。 我是一名探鬼主播登舞,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悬荣!你這毒婦竟也來了菠秒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氯迂,失蹤者是張志新(化名)和其女友劉穎践叠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嚼蚀,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡禁灼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驰坊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾二。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哮独,死狀恐怖拳芙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情皮璧,我是刑警寧澤舟扎,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站悴务,受9級特大地震影響睹限,放射性物質(zhì)發(fā)生泄漏譬猫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一羡疗、第九天 我趴在偏房一處隱蔽的房頂上張望染服。 院中可真熱鬧,春花似錦叨恨、人聲如沸柳刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秉颗。三九已至,卻和暖如春送矩,著一層夾襖步出監(jiān)牢的瞬間蚕甥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工栋荸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菇怀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓晌块,卻偏偏與公主長得像敏释,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子摸袁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容