思來想去,UIButton就是一個按鈕,就是平時我們用手指點擊一個控件,然後有相應的事件產生,點擊的時候或許還會產生顏色上的變化,這個就叫做UIbutton。
它可以顯示文字,也可以顯示圖片,也可以動態調整內部的圖片和文字,而且也可以添加屬性化字符串,至於屬性化字符串是什麼,不懂的話沒關系,後面我會講到。
UIButton有三種狀態:
默認情況(default)
對應的枚舉常量:UIControlStateNormal
按鈕被按下去的時候(手指還未松開)
對應的枚舉常量:UIConrolStateHighlighted
如果enabled屬性為0, 就是處於disable狀態,代表按鈕不可以被點擊
對應的枚舉常量:UIControlStateDisabled
下面就在代碼裡面說明UIButton的屬性和方法吧
- (void)viewDidLoad { [super viewDidLoad]; /* typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = 0, // 自定義風格 UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // standard system button UIButtonTypeDetailDisclosure, // 藍色小箭頭按鈕,主要做詳細說明用 UIButtonTypeInfoLight, // 亮色感歎號 UIButtonTypeInfoDark, // 暗色感歎號 UIButtonTypeContactAdd, // 加號按鈕 UIButtonTypeRoundedRect = UIButtonTypeSystem, // 系統默認 圓角矩形按鈕 }; */ //創建一個類型為圓角矩形的按鈕,當然也是系統默認 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //frame裡面包含控件的坐標和寬高,這裡直接設置坐標(20, 20), 寬高(100, 100) btn.frame = CGRectMake(20, 20, 100, 100); //設置按鈕的背景顏色 btn.backgroundColor = [UIColor greenColor]; //設置按鈕的渲染顏色 btn.tintColor = [UIColor blackColor]; /* 這裡設置狀態,一般設置正常和高亮狀態,當然也有其他狀態可供選擇 UIControlStateNormal = 0, // 正常狀態 UIControlStateHighlighted = 1 << 0, // 高亮狀態 UIControlStateDisabled = 1 << 1, // 禁用狀態 UIControlStateSelected = 1 << 2, // 選中狀態 UIControlStateApplication = 0x00FF0000, // 當應用程序標志時 UIControlStateReserved = 0xFF000000 // 內部預留 */ //設置按鈕的填充圖片 正常狀態下的 [btn setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal]; //設置按鈕的填充圖片 高亮狀態下 也就是被點擊時 [btn setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateHighlighted]; //設置按鈕上顯示的文字 [btn setTitle:@"" forState:UIControlStateNormal]; //設置按鈕上文字的顏色 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; //設置按鈕上文字的陰影顏色 [btn setTitleShadowColor:[UIColor blueColor] forState:UIControlStateNormal]; //設置按鈕的背景圖片 [btn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; //設置按鈕的屬性字符串 此處如果不懂什麼叫屬性字符串 可以跳過 NSAttributedString * attrString =[[NSAttributedString alloc] initWithString:@"設置屬性字符串"]; [btn setAttributedTitle:attrString forState:UIControlStateNormal]; //設置按鈕內部圖片的內間距 //top bottom 上下 left right 左右 //UIEdgeInsets inserts = UIEdgeInsetsMake(0, 0, 0, 0); //默認情況下,當按鈕高亮的情況下,圖像的顏色會變深一些,這裡設置為no,那麼會取消這個狀態 btn.adjustsImageWhenHighlighted = NO; //默認情況下,當按鈕禁用的情況下,圖形的顏色會變深一些,這裡設置為no,那麼會取消這個狀態 btn.adjustsImageWhenDisabled = NO; //當此處設置為YES時,按下按鈕的時候會發光 btn.showsTouchWhenHighlighted = YES; /* UIControlEventTouchDown //單點觸摸按下事件:用戶點觸屏幕,或者又有新手指落下的時候 UIControlEventTouchDownRepeat //多點觸摸按下事件,點觸計數大於1:用戶按下第二、三、或第四根手指的時候。 UIControlEventTouchDragInside //當一次觸摸在控件窗口內拖動時。 UIControlEventTouchDragOutside //當一次觸摸在控件窗口之外拖動時。 UIControlEventTouchDragEnter //當一次觸摸從控件窗口之外拖動到內部時。 UIControlEventTouchDragExit //當一次觸摸從控件窗口內部拖動到外部時。 UIControlEventTouchUpInside //所有在控件之內觸摸抬起事件。 UIControlEventTouchUpOutside //所有在控件之外觸摸抬起事件(點觸必須開始與控件內部才會發送通知)。 UIControlEventTouchCancel //所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消,或者被上鎖或者電話呼叫打斷。 UIControlEventTouchChanged //當控件的值發生改變時,發送通知。用於滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時發送通知,在滑塊被放下時發送,或者在被拖動時發送。 UIControlEventEditingDidBegin //當文本控件中開始編輯時發送通知。 UIControlEventEditingChanged //當文本控件中的文本被改變時發送通知。 UIControlEventEditingDidEnd //當文本控件中編輯結束時發送通知。 UIControlEventEditingDidOnExit //當文本控件內通過按下回車鍵(或等價行為)結束編輯時,發送通知。 UIControlEventAlltouchEvents //通知所有觸摸事件。 UIControlEventAllEditingEvents //通知所有關於文本編輯的事件。 UIControlEventAllEvents //通知所有事件。 */ //給按鈕增加一個點擊事件 [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; //刪除某一種狀態下的所有事件處理 //[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside]; //給按鈕增加一個長按事件 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)]; //設置按多長事件會觸發長按事件 longPress.minimumPressDuration = 1; //把事件添加到按鈕上 [btn addGestureRecognizer:longPress]; //把按鈕添加到控制器的視圖上 //注意,千萬不要忘記這一步 [self.view addSubview:btn]; } - (void)btnClick { NSLog(@"%s", __func__); } - (void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer { if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { NSLog(@"長按事件"); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"消息" message:@"確定刪除嗎?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"刪除", nil]; [alert show]; } }