UIButton的基本使用
1. 創(chuàng)建button
? ??UIButton *btn = [UIButton buttonWithType:(UIButtonType)UIButtonTypeCustom];
????UIButtonType? ? 枚舉類型
? ??????UIButtonTypeCustom?= 0 ? ?自定義風格
? ??????UIButtonTypeRoundedRect ? ?圓角矩形
????????UIButtonTypeDetailDisclosure ? ?藍色小箭頭按鈕, 主要做詳細說明使用
? ??????UIButtonTypeInfoLight ? ?亮色感嘆號
? ??????UIButtonTypeInfoDark ? ?暗色感嘆號
? ??????UIButtonTypeContactAdd ? ?十字加號按鈕
2. frame? ? 設(shè)置按鈕的位置大小
? ??btn.frame = CGRectMake(0,104,SCREEN_Width,40); (SCREEN_Width 屏幕寬度)
3. title 按鈕樣式內(nèi)容
? ??[btn setTitle:@"本是惡魔世界里的小丑, 奈何生長在了耀眼的和平世界" forState: UIControlStateNormal]; 設(shè)置按鈕文本內(nèi)容
? ? [btn setTitleColor:[UIColor blackColor] forState:(UIControlState)UIControlStateNormal]; 設(shè)置按鈕文本字體顏色
? ??[btn setImage:[UIImage imageNamed:@"weChat"] forState:(UIControlStateNormal)]; 給按鈕設(shè)置圖片,
? ? 在同時設(shè)置按鈕的圖片和文字內(nèi)容時會左邊顯示圖片, 右邊顯示文字, 如下圖
? ??btn.backgroundColor = [UIColor yellowColor]; ? ?給按鈕設(shè)置背景顏色
? ??[btn setBackgroundImage:[UIImage imageNamed:@"share"] forState:(UIControlStateNormal)]; 按鈕設(shè)置背景圖片
? ??btn.layer.masksToBounds = YES;
? ? btn.layer.cornerRadius = 10;
? ? btn.layer.borderColor = [UIColor blueColor].CGColor;
? ? btn.layer.borderWidth = 1; ? ?以上四行代碼就是設(shè)置按鈕的圓角和邊框(UIlabel等控件同)
? ??UIControlState 按鈕枚舉類型
? ??????UIControlStateNormal = 0 ? ?常規(guī)狀態(tài)顯示 (使用次數(shù)居多)
? ??????UIControlStateHighlighted ? ?高亮狀態(tài)顯示
? ??????UIControlStateDisabled ? ?禁用的狀態(tài)才能顯示
? ??????UIControlStateSelected ? ?選中時顯示的狀態(tài)
? ??????UIControlStateFocused ? ?當獲得焦點狀態(tài)時才會顯示
? ??????UIControlStateApplication ? ?當應(yīng)用程序標志時顯示
? ??????UIControlStateReserved ? ?為內(nèi)部框架預留, 開發(fā)時不用管
4.?adjustsImageWhenHighlighted?默認情況下庆揩,當按鈕高亮的情況下罢屈,圖像的顏色會被畫深一點
? ? ? ? btn.adjustsImageWhenHighlighted = NO;????如果這下面的這個屬性設(shè)置為no,?那么可以去掉這個功能
5.?adjustsImageWhenDisabled 如果4的按鈕設(shè)置為NO時 設(shè)置這個屬性為NO時會取消4的設(shè)置
? ? ? ? btn.adjustsImageWhenDisabled = NO;
6.?showsTouchWhenHighlighted 當這個屬性為YES時按下按鈕會發(fā)光
? ? ? ? btn.showsTouchWhenHighlighted = YES; 親測有效
7. 給按鈕添加點擊事件addTarget
????????[btn addTarget:self action:@selector(selectorBtn) forControlEvents:(UIControlEventAllTouchEvents)];
? ??UIControlEvents 點擊事件枚舉類型
? ??????UIControlEventTouchDown
????????單點觸摸按下事件:用戶點觸屏幕饰恕,或者又有新手指落下的時候。
? ??????UIControlEventTouchDownRepeat
????????多點觸摸按下事件,點觸計數(shù)大于1:用戶按下第二访雪、三至耻、或第四根手指的時候煌张。
? ??????UIControlEventTouchDragInside
????????當一次觸摸在控件窗口內(nèi)拖動時膘盖。
? ??????UIControlEventTouchDragOutside
????????當一次觸摸在控件窗口之外拖動時至会。
????????UIControlEventTouchDragEnter
????????當一次觸摸從控件窗口之外拖動到內(nèi)部時褒搔。
????????UIControlEventTouchDragExit
????????當一次觸摸從控件窗口內(nèi)部拖動到外部時夷磕。
????????UIControlEventTouchUpInside (常用)
????????所有在控件之內(nèi)觸摸抬起事件。
????????UIControlEventTouchUpOutside
????????所有在控件之外觸摸抬起事件(點觸必須開始與控件內(nèi)部才會發(fā)送通知)亏拉。
????????UIControlEventTouchCancel
????????所有觸摸取消事件扣蜻,即一次觸摸因為放上了太多手指而被取消逆巍,或者被上鎖或者電話呼叫打斷。
????????UIControlEventTouchChanged
????????當控件的值發(fā)生改變時莽使,發(fā)送通知锐极。用于滑塊、分段控件吮旅、以及其他取值的控件溪烤。你可以配置滑塊控件何時發(fā)送通知,在滑塊被放下時發(fā)送庇勃,或者在被拖動時發(fā)送。
????????UIControlEventEditingDidBegin
????????當文本控件中開始編輯時發(fā)送通知槽驶。
????????UIControlEventEditingChanged
????????當文本控件中的文本被改變時發(fā)送通知责嚷。
????????UIControlEventEditingDidEnd
????????當文本控件中編輯結(jié)束時發(fā)送通知。
????????UIControlEventEditingDidOnExit
????????當文本控件內(nèi)通過按下回車鍵(或等價行為)結(jié)束編輯時掂铐,發(fā)送通知罕拂。
????????UIControlEventAlltouchEvents
????????通知所有觸摸事件。
????????UIControlEventAllEditingEvents
????????通知所有關(guān)于文本編輯的事件全陨。
????????UIControlEventAllEvents
????????通知所有事件爆班。
8. 按鈕樣式圖片+文字
? ? ? ? 樣式需要重寫button方法, 可以網(wǎng)上搜索一下, 很多文章本文小編給放一個在上面
? ? ? ? .h文件里面
? ??????????@interfaceUIButton(Extensions)
????????????- (void)setUpImageAndDownLableWithSpace:(CGFloat)space; ? ?上部分是圖片,下部分是文字
????????????- (void)setLeftTitleAndRightImageWithSpace:(CGFloat)space;????左邊是文字,右邊是圖片
????????????- (void)setBadgeValue:(NSInteger)badgeValue;????設(shè)置角標的個數(shù)(右上角)
? ??????????@end
? ? ? ? .m文件里面
? ??????????@implementation UIButton (Extensions)
?????????????上部分是圖片,下部分是文字
????????????- (void)setUpImageAndDownLableWithSpace:(CGFloat)space{
? ? ????????????CGSizeimageSize =self.imageView.frame.size;
? ? ????????????CGSizetitleSize =self.titleLabel.frame.size;
? ? ????????????// titleLabel的寬度不一定正確的時候辱姨,需要進行判斷
? ? ????????????CGFloat labelWidth = self.titleLabel.intrinsicContentSize.width;
? ? ????????????if(titleSize.width< labelWidth) {
? ? ? ? ????????????titleSize.width= labelWidth;
? ? ????????????}
? ? ????????????// 文字距上邊框的距離增加imageView的高度+間距柿菩,距離左邊框減少imageView的寬度,距離下邊框和右????????邊框距離不變
? ? ????????????[selfsetTitleEdgeInsets:UIEdgeInsetsMake(imageSize.height+space, -15, -space,0)];
? ? ????????????// 圖片距右邊框的距離減少圖片的寬度雨涛,距離上面的間隔枢舶,其它不變
? ? ????????????[selfsetImageEdgeInsets:UIEdgeInsetsMake(-space*2, -space*0.5,0.0,-titleSize.width)];
????????????}
????????????左邊是文字,右邊是圖片(和原來的樣式翻過來)
????????????- (void)setLeftTitleAndRightImageWithSpace:(CGFloat)space{
? ????????????? CGSizeimageSize =self.imageView.frame.size;
? ? ????????????CGSizetitleSize =self.titleLabel.frame.size;
? ? ? ? ? ? ? ?// titleLabel的寬度不一定正確的時候替久,需要進行判斷
? ? ????????????CGFloat labelWidth = self.titleLabel.intrinsicContentSize.width;
? ? ????????????if(titleSize.width< labelWidth) {
? ? ? ? ????????titleSize.width= labelWidth;
? ? ????????????}
? ? ????????// 文字距左邊框的距離減少imageView的寬度-間距凉泄,右側(cè)增加距離imageView的寬度
? ? ????????[selfsetTitleEdgeInsets:UIEdgeInsetsMake(0.0, -imageSize.width- space,0.0, imageSize.width)];
? ? ????????// 圖片距左邊框的距離增加titleLable的寬度,距右邊框的距離減少titleLable的寬度
? ? ????????[selfsetImageEdgeInsets:UIEdgeInsetsMake(0.0, titleSize.width,0.0,-titleSize.width)];
????????????}
?????????????設(shè)置角標的個數(shù)(右上角
? ? ? ? ? ? ? - (void)setBadgeValue:(NSInteger)badgeValue{
? ? ????????????????CGFloatbadgeW? = 20;
? ? ????????????????CGSizeimageSize =?self.imageView.frame.size;
? ? ????????????????CGFloatimageX? =?self.imageView.frame.origin.x;
? ? ????????????????CGFloatimageY? =?self.imageView.frame.origin.y;
? ? ????????????????UILabel*badgeLable = [[UILabelalloc]init];
? ? ? ? ? ? ? ? ? ? badgeLable.text = [NSStringstringWithFormat:@"%ld",badgeValue];
? ? ????????????????badgeLable.textAlignment = NSTextAlignmentCenter;
? ? ????????????????badgeLable.textColor= [UIColorwhiteColor];
? ? ????????????????badgeLable.font = [UIFontsystemFontOfSize:12];
? ? ????????????????badgeLable.layer.cornerRadius = badgeW*0.5;
? ? ????????????????badgeLable.clipsToBounds =?YES;
? ? ????????????????badgeLable.backgroundColor = [UIColorredColor];
? ? ????????????????CGFloatbadgeX = imageX + imageSize.width- badgeW*0.5;
? ? ????????????????CGFloatbadgeY = imageY - badgeW*0.25;
? ? ????????????????badgeLable.frame = CGRectMake(badgeX, badgeY, badgeW, badgeW);
? ? ????????????????[self?addSubview:badgeLable];
????????????????}
? ??????????@end