博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIButton
阅读量:6427 次
发布时间:2019-06-23

本文共 6464 字,大约阅读时间需要 21 分钟。

一、前言

    该博客里面的方法均是看着苹果官方的API来解释的,如有问题,请指出。

二、简介:

    UIButton就是一个按钮,它的应用十分广泛,比如登录,注册,忘记密码等功能的实现时都需要用到按钮。现在就让我们一起走进UIButton。

二、常用方法

    1、+ (id)buttonWithType:(UIButtonType)buttonType;  (IOS2及其以后有)

    该方法用与创建和返回一个带有制定样式的按钮。当使用该方法创建一个button,这个button的frame默认被设置为(0,0,0,0),所以当你要添加此方法创建的button到view时,首先应该更新一下frame。

    buttonType是一个枚举值。里面有几种不同的样式。下面是UIButtonType的枚举

typedef NS_ENUM(NSInteger, UIButtonType) {    UIButtonTypeCustom = 0,                         // no button type    UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button     UIButtonTypeDetailDisclosure,    UIButtonTypeInfoLight,    UIButtonTypeInfoDark,    UIButtonTypeContactAdd,

 

    

    UIButtonTypeRoundedRect = UIButtonTypeSystem,   // Deprecated, use UIButtonTypeSystem instead

 

};

    使用该方法的例子:

  

UIButton *button = [UIButton buttonWithType:UIButtonTypeInfoDark];    button.frame =CGRectMake(10, 10, 230, 30);     [button setTitle:@"测试" forState:UIControlStateNormal];     [self.view addSubview:button];

 

读者可以自行修改参数来设置按钮样式。

 

三、常用属性

    1、@property(nonatomic)UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR;(IOS2以及以后)

    UIEdgeInsets是一个结构体。具体实现如下:

typedef struct UIEdgeInsets {    CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset' } UIEdgeInsets;

 

 

该属性定义了视图的插入距离。 简单来说就是来设置button显示内容距离上、下、左、右的距离。

代码如下:  button.contentEdgeInsets = UIEdgeInsetsMake(100010);

 

读者可以自行查看。

    2、@property(nonatomic)UIEdgeInsets titleEdgeInsets;                // default is UIEdgeInsetsZero

        该属性类似与第一个属性,主要是设置button的title距离上、下、左、右的距离。上面的那个是设置内容的距离。

    3、@property(nonatomic)UIEdgeInsets imageEdgeInsets;                // default is UIEdgeInsetsZero

        该属性和上边两个类似,主要设置button上image的距离上下左右的距离。

    4、@property(nonatomicBOOL adjustsImageWhenHighlighted;    // default is YES. if YES, image is drawn darker when  highlighted(pressed)

        该属性默认是yes,它确定是否改变图片当button点击的时候。(没有测出来有什么变化!!!)

    5、@property(nonatomic,readonlyUIButtonType buttonType;

        该属性是只读的,用户获取button 类型,返回的枚举数字。0,1,2,3,4

    6、@property(nonatomic)BOOL  showsTouchWhenHighlighted;      // default is NO. if YES, show a simple feedback (currently a glow) while highlighted   

        该属性是控制当按钮点击的时候是否按钮本身发光。默认的是NO,不会发光,当设置为YES时,按钮将发高光

    7、@property(nonatomic)BOOL adjustsImageWhenDisabled;     // default is YES. if YES, image is drawn lighter when disabled

        该属性是决定当按钮不可点击时,图片是否改变。如果YES,那么图片被绘制的更加黑,前提是按钮不可点击。

    8、@property(nonatomic,readonly,retainNSString *currentTitle;  // normal/highlighted/selected/disabled. can return nil

        该属性用于得到当前button的title.

    9、@property(nonatomic,readonly,retainUIColor  *currentTitleColor; // normal/highlighted/selected/disabled. always returns non-nil. 

        该属性用于得到当前title的颜色

    10、都列出来吧

        @property(nonatomic,readonly,retainNSString *currentTitle;             // normal/highlighted/selected/disabled. can return nil

        @property(nonatomic,readonly,retainUIColor  *currentTitleColor;        // normal/highlighted/selected/disabled. always returns non-nil. default is white(1,1)

        @property(nonatomic,readonly,retainUIColor  *currentTitleShadowColor;  // normal/highlighted/selected/disabled. default is white(0,0.5).

        @property(nonatomic,readonly,retainUIImage  *currentImage;             // normal/highlighted/selected/disabled. can return nil

        @property(nonatomic,readonly,retainUIImage  *currentBackgroundImage;   // normal/highlighted/selected/disabled. can return nil

        @property(nonatomic,readonly,retainNSAttributedString *currentAttributedTitle NS_AVAILABLE_IOS(6_0);  // normal/highlighted/selected/

       11、

        // return title and image views. will always create them if necessary. always returns nil for system buttons

        @property(nonatomic,readonly,retainUILabel     *titleLabel NS_AVAILABLE_IOS(3_0);

        @property(nonatomic,readonly,retainUIImageView *imageView  NS_AVAILABLE_IOS(3_0);

        

        这两个属性都是只读的。titleLabel用户展示当前的title属性。imageView用户展示当前imageView;

        这些属性都是用与获取当前的属性值。和8、9一样。

        在重写按钮时,可以用这个两个属性去获取已经设置好的图片和title.

四、常用方法

    1、- (void)setTitle:(NSString *)title forState:(UIControlState)state;  // default is nil. title is assumed to be single line

        用来设置按钮显示的title。

        UIControlState是一个枚举类型。

typedef NS_OPTIONS(NSUInteger, UIControlState) {            UIControlStateNormal       = 0,            UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set            UIControlStateDisabled     = 1 << 1,            UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)            UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use            UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use        };

 

  这个我亲测了一下,不过不同的state有时候我没有看出差别。(可能理解不深)

    2、- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR// default if nil. use opaque white

        该方法是用来设置显示title的颜色,在这里,UIControlState比较明显

        当设置为UIControlStateNormal,显示的是自己设置的颜色;

        当设置为UIControlStateHighlighted,也就是当按钮选中后的颜色为你设置的颜色

        当设置为UIControlStateDisabled,就是当按钮不可点击时,按钮title的颜色

        当设置为UIControlStateSelected,就是当按钮选择时,按钮的颜色。

        而后两个还不太清楚。而且用到的不多。

    3、- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR// default is nil. use 50% black

        设置title的阴影的颜色,后边的UIControlState和上面的是一样的,就不再赘述。

    4、- (void)setImage:(UIImage *)image forState:(UIControlState)state;       // default is nil. should be same size if different 

        这个方法用来设置按钮上左边的图片,UIControlState和上面的一样。

    5、- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state UI_APPEARANCE_SELECTOR// default is nil

        该方法设置的是按钮的背景色。

    6、- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state NS_AVAILABLE_IOS(6_0); // default is nil. title is assumed to be single line

        设置按钮title,这个和第2个方法的区别是此方法会覆盖2方法,而且该方法可以设置带属性的字符串,然后作为title.

    7、以下的方法一起来说:

        - (NSString *)titleForState:(UIControlState)state;          // these getters only take a single state value

        - (UIColor *)titleColorForState:(UIControlState)state;

        - (UIColor *)titleShadowColorForState:(UIControlState)state;

        - (UIImage *)imageForState:(UIControlState)state;

        - (UIImage *)backgroundImageForState:(UIControlState)state;

 

        - (NSAttributedString *)attributedTitleForState:(UIControlState)state NS_AVAILABLE_IOS(6_0);

        它们都是getter方法,只读,用与获取不同UIControlState下的属性值,例如:

   

[button setTitle:@"测ddd试" forState:UIControlStateDisabled];       NSString *s = [button titleForState:UIControlStateDisabled];

 

        s就是:测ddd试。其他类似。

    8、- (CGRect)titleRectForContentRect:(CGRect)contentRect;

       - (CGRect)imageRectForContentRect:(CGRect)contentRect;

    这两个放到一起说,它们很大程度上用与重写按钮时,在自己的按钮.m中可以自动调用这两个方法,这样就可以对这两个方法进行重写,使按钮title和image位置改变。实现自己需要的效果。

转载地址:http://bfbga.baihongyu.com/

你可能感兴趣的文章
一句话下拖库
查看>>
Deploy Office Communications Server 2007R2 Group Chat Server(二)
查看>>
在Cacti上实现MSN报警机制
查看>>
如何对C++虚基类构造函数
查看>>
XFire WebService开发快速起步
查看>>
JavaScript 函数replace揭秘
查看>>
QTP解决内嵌IE窗体方法2
查看>>
“王子”的演讲:N828印象
查看>>
判断JS字符串中是否包含某些字符
查看>>
Phalanger---PHP的.NET编译器
查看>>
Scanner----java控制台和文件读取的利器(java 5新增)
查看>>
如何安全设定和检测你的密码安全性?
查看>>
一例HP ADG数据恢复成功(8×73GB SCSI)
查看>>
虚拟化系列-Citrix XenServer 6.1 XenMotion与HA
查看>>
TFS创建团队项目(三)
查看>>
对发展的一点小感想
查看>>
示例化讲解RIP路由更新机制
查看>>
eclipse不能自动编译工程的解决方法
查看>>
Powershell管理系列(九)删除Exchange用户邮箱中多余的电子邮件地址
查看>>
Swt/Jface进度条
查看>>