UIButton 是一個非常實用的控件,在我們以后的開發(fā)生涯中他是不可或缺的。
下面我們一起來學習UIButton吧!!!
UIButton 簡介
UIButton是一個可以相應事件的控件,因此他的直接父類是UIControl而不是UIView。總所周知所有能顯示數(shù)據(jù)的都是UIView,所以我的按鈕他也是一個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)建。這個方法接收的是一個按鈕樣式的枚舉值,根據(jù)不同的枚舉
,創(chuàng)建不同樣式
的按鈕;樣式枚舉詳解如下:
typedef NS_ENUM(NSInteger, UIButtonType) {
UIButtonTypeCustom = 0, // 自定義按鈕
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // 系統(tǒng)按鈕--當前樣式被選中情況下,背景顏色會被改變
UIButtonTypeDetailDisclosure, // 藍色箭頭按鈕(用作詳
UIButtonTypeInfoLight, // 亮色感嘆號按鈕
UIButtonTypeInfoDark, // 深色感嘆號按鈕
UIButtonTypeContactAdd, // 加號按鈕
UIButtonTypeRoundedRect = UIButtonTypeSystem, // Deprecated, use UIButtonTypeSystem instead
};
因為使用的是方法創(chuàng)建的,在創(chuàng)建的過程中沒有設置frame
,所以我們在創(chuàng)建后一定要自己手動設置
按鈕的frame
,這個是必不可少的,frame很容易遺忘,所以大家要多注意下,少了frame按鈕將不顯示
。
其他屬性
設置Button的標題
對于按鈕的標題不能通過屬性直接
設置,我們需要使用方法
來設置;因為按鈕他具有不同的狀態(tài),在不同的狀態(tài)下標題也不一樣
,使用-setTitle: forState:
方法來設置在不同狀態(tài)下對應的標題,如下:
[btn setTitle:@"點我呀" forState:UIControlStateNormal];
UIControlStateNormal
是一個枚舉類型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),是否選中需要手動設置
UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // 聚焦狀態(tài) (iOS新加入 應該和3D Touch有關)
UIControlStateApplication = 0x00FF0000, // 當用做應用標志時
UIControlStateReserved = 0xFF000000 // 框架預留 無意義
};
對于以上幾種狀態(tài)大家最好去一一試試,看看效果,只有試過,才能更理解
按鈕標題相關
//標題文本顏色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//標題陰影顏色
[btn setTitleShadowColor:[UIColor redColor] forState:UIControlStateNormal];
//獲取某種狀態(tài)下的標題
NSString *titleStr = [btn titleForState:UIControlStateSelected];
手動設置按鈕的選中狀態(tài)
btn.selected = NO;
設置按鈕的背景顏色
btn.backgroundColor = [UIColor redColor];
設置按鈕圖片
//設置按鈕前景圖片---不會被拉伸,原比例顯示, 會遮住按鈕標題
[btn setImage:[UIImage imageNamed:@"btnIcon"] forState:UIControlStateNormal];
// 設置按鈕背景圖片---會被拉伸,充滿整個btn, 按鈕標題會顯示在圖片之上
[btn setBackgroundImage:[UIImage imageNamed:@"btnBgImg"] forState:UIControlStateNormal];
設置按鈕的相關間距
//btn整體內容四周的間距
btn.contentEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
//標題四周間距
btn.titleEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
//圖片四周間距
btn.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15);
按鈕事件
添加按鈕響應事件
//target: 執(zhí)行者
//action:被執(zhí)行的方法
//events:事件
//當按鈕的的事件被觸發(fā)時,調用執(zhí)行者的被執(zhí)行方法--[self clickBtn:btn]
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
刪除按鈕響應事件
//刪除的參數(shù)必須要添加時候的參數(shù)一樣,否則刪除不能成功
[btn removeTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
事件狀態(tài)詳解
UIControlEventTouchDown
單點觸摸按下事件:用戶點觸屏幕,或者又有新手指落下的時候。
UIControlEventTouchDownRepeat
多點觸摸按下事件,點觸計數(shù)大于1:用戶按下第二、三、或第四根手指的時候。
UIControlEventTouchDragInside
當一次觸摸在控件窗口內拖動時。
UIControlEventTouchDragOutside
當一次觸摸在控件窗口之外拖動時。
UIControlEventTouchDragEnter
當一次觸摸從控件窗口之外拖動到內部時。
UIControlEventTouchDragExit
當一次觸摸從控件窗口內部拖動到外部時。
UIControlEventTouchUpInside
所有在控件之內觸摸抬起事,一般用于按鈕。
UIControlEventTouchUpOutside
所有在控件之外觸摸抬起事件(點觸必須開始與控件內部才會發(fā)送通知)。
UIControlEventTouchCancel
所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消,或者被上鎖或者電話呼叫打斷。
UIControlEventTouchChanged
當控件的值發(fā)生改變時,發(fā)送通知。用于滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時發(fā)送通知,在滑塊被放下時發(fā)送,或者在被拖動時發(fā)送。
UIControlEventEditingDidBegin
當文本控件中開始編輯時發(fā)送通知。
UIControlEventEditingChanged
當文本控件中的文本被改變時發(fā)送通知。
UIControlEventEditingDidEnd
當文本控件中編輯結束時發(fā)送通知。
UIControlEventEditingDidOnExit
當文本控件內通過按下回車鍵(或等價行為)結束編輯時,發(fā)送通知。
UIControlEventAlltouchEvents
通知所有觸摸事件。
UIControlEventAllEditingEvents
通知所有關于文本編輯的事件。
UIControlEventAllEvents
通知所有事件。
歡迎大家踴躍評論,讓我們一起探討技術!!
如果覺得文章不錯,請幫忙點擊文章下方的喜歡
!!
你的支持將是對我最好的鼓勵, 謝謝!!!