博客> UIButton官方文档学习笔记
UIButton官方文档学习笔记
2019-08-23 04:01 评论:0 阅读:1147 gcftotem
ios button 官方文档

第三份官方文档学习笔记来了,这次的是UIButton。UIButton在我们平时所用的控件中,应该算是使用频率很高的一个了。相对而言的,它的官方文档也是有点多的。 UIButton是用来实现用户与应用之间交互的一个控件,它继承于UIControl类。UIButton支持用户自定义,可以设置button控件的颜色,文字,图片以及事件触发方式。 官方文档对使用button的时候,提出了几个步骤要求:首先在button创建的时候,需要设置button的type。还需要为创建的button提供一个标题或者图片。确定button的frame大小,为button添加一个或多个方法,同时设置好button的AutoLayout。最后一个Provide accessibility information and localized strings.这句我没搞懂,有知道的可以解释下。 在介绍属性跟方法前,先来说下UIButton的样式,官方原文是这样的:A button’s type defines its basic appearance and behavior. You specify the type of a button at creation time using the buttonWithType: method or in your storyboard file.After creating a button, you cannot change its type. 意思是你需要在创建UIButton对象的时候使用buttonWithType方法来确定button的type,如果你没有设置,那么后面就无法更改它的type了。这是因为UIButton有一个buttonType的属性,这个属性是只读的,默认是custom风格,你只有在刚创建button对象的时候用buttonWithType类方法才能修改设定它。 接下来只要做了一些介绍,我觉得就下面这张图有点用: Enter your image description here: ,图上的几个属性都是只读的,因为UIButton有好几个state状态,你可以为不同阶段的state设置不同的标题,颜色,背景跟其它一些属性,当用户跟UIButton交互的时候,UIButton就会根据需要做出相对应的改变,但是这几个属性并不能够直接设置。 然后介绍的是Interface Builder Attributes。也就是界面构造器上的属性,官方文档对每个属性相对应的类属性进行了关联,如果你用的是纯代码的方式,那么直接跳过这一部分吧,当然如果有兴趣的话,也是可以看一看的。 Internationalization相信大家都应该熟悉,在做国际化的时候,可以根据要适配的国家地区,自己选择。 好了,我们可以开始看UIButton的属性了,先汇总一下: 1.titleLabel 2.reversesTitleShadowWhenHighlighted 3.adjustsImageWhenHighlighted 4.adjustsImageWhenDisabled 5.showsTouchWhenHighlighted 6.tintColor 7.contentEdgeInsets 8.titleEdgeInsets 9.imageEdgeInsets 10.buttonType 11.currentTitle 12.currentAttributedTitle 13.currentTitleColor 14.currentTitleShadowColor 15.currentImage 16.currentBackgroundImage 17.imageView 先来看第一个: 1.titleLabel。这是一个UILabel类型的属性,而且官方文档写的是只读的。它用来显示另一个属性currentTitle的值。titleLabel本身是只读的,但是它所拥有的属性是可以读写的,你可以修改它的字体或者其它属性,但是官方文档上写着不允许直接设置它的text color 和shadow color,如果要设置这两个属性,需要使用setTitleColor:for state:跟setTitleShadowColor:forState:方法。 让我比较疑惑的是最后这句话:The titleLabel property returns a value even if the button has not been displayed yet. The value of the property is nil for system buttons.官方文档说这个属性会返回一个值,而系统button返回的这个属性的值是nil。我试了下,发现返回的并不是nil。代码跟输出内容见下图: Enter your image description here: , Enter your image description here:  ,更改button创建方式为[[UIButton alloc] init]也没有返回nil,所以我不知道这边的system button的意思,是我理解错误了还是这是官方文档的一个bug。 2.reversesTitleShadowWhenHighlighted.这是一个布尔值属性,默认值是NO,官方文档的解释是A Boolean value that determines whether the title shadow changes when the button is highlighted.在下面的discussion中是这么说的If YES, the shadow changes from engrave to emboss appearance when highlighted. The default value is NO.这个有点不容易理解,并且你如果去程序里面测试的话,会发现效果并不明显。这里就要提到titleLabel了,titleLabel继承自UILabel类,而UILabel有一个shadowOffset属性,这个属性的作用,就是你的title阴影与title的相对位移距离,它的默认值是(0,-1),所以看起来并不明显,你可以设置为(10,-10),这样,当你把button的reversesTitleShadowWhenHighlighted值设置为YES的时候,你就会发现,shadow的位置发生了明显的变化,官方的解释不好理解,其实,这个属性的效果,就是当你点击后,会把titleLabel的shadowOffset的值反一下。 3.adjustsImageWhenHighlighted。这是一个默认值是YES的布尔变量,它起到的效果是,如果设置为YES的时候,当button处于UIControlStateHighlighted状态下的时候,会对你设置的image进行一定程度上的画清处理,差不多就是在image上面蒙一层阴影。开始的时候我没看discussion,以为官方文档写的image changes指的是改变图片,所以给button的normal跟highlighted状态设置了不同的图片,然后把adjustsImageWhenHighlighted属性设置为NO,我以为图片不会改变了,运行后的结果就呵呵了,看了下面的discussion才弄懂了是为什么,果然不能想当然啊。 4.adjustsImageWhenDisabled。跟上面的属性差不多,当你设置为YES的时候,当按钮进入disabled状态会对设置的image进行画深处理。 5.showsTouchWhenHighlighted。这也是一个布尔值,默认为NO,当你设置它为YES的时候,你点击按钮,按钮会显示光亮来表示它被点击了。要注意的是,这个效果对image不起作用。 6.tintColor。这个属性不好解释,大家有兴趣自己去看下UIView的官方文档,其主要作用就是定义了一个非默认的着色颜色值。它对被设置为custom类型的button没有作用。 7.contentEdgeInsets。这个主要用来设置button的内外边距。 8.titleEdgeInsets。这个主要用来设置titleLabel的内外边距。 9.imageEdgeInsets。这个主要用来设置image的内外边距。 10.buttonType.这是一个UIButtonType类型的只读属性,UIButtonType见下图: Enter your image description here: ,大家可以去试下,具体的有什么不同。 11.currentTitle。这个属性是只读的,它是一个NSString值,当button的state变化的时候,它的值也会相应的随着变化,当某一个state没有设置具体的title的时候,它会调用normal状态下的title,需要注意的是,这个值可以是nil。 12.currentAttributedTitle。跟currentTitle很像,但是还是有区别的,在我看来他主要用来处理一些titleLabel不能满足的需求,比如你要button显示的title的每个字颜色字体都不相同等。当设置了这个属性的时候,在button的显示上,会覆盖currentTitle 在textLabel上的显示效果。 13.currentTitleColor。又一个只读属性,它表示的是当前titleLabel的text的字体颜色。默认值是白色。 14.currentTitleShadowColor。跟currentTitleColor类似,默认值也是白色。 15.currentImage。也是只读属性,表示当前button的image。 16.currentBackgroundImage。还是只读的,表示当前的背景图片。 17.imageView。button的imageView,官方文档上说如果是system类型的button,这个值是nil,现在找到为什么给system类型button设置图片的时候,只有蓝色背景了吧。 属性讲完了,我们再来看下方法吧,还是先汇总: 1.+ (instancetype)buttonWithType:(UIButtonType)buttonType 2.- (NSString )titleForState:(UIControlState)state 3.- (void)setTitle:(NSString )title forState:(UIControlState)state 4.- (NSAttributedString )attributedTitleForState:(UIControlState)state 5.- (void)setAttributedTitle:(NSAttributedString )title forState:(UIControlState)state 6.- (UIColor )titleColorForState:(UIControlState)state 7.- (void)setTitleColor:(UIColor )color froState:(UIControlState)state 8.- (UIColor )titleShadowColorForState:(UIControlState)state 9.- (void)setTitleShadowColor:(UIColor )color forState:(UIControlState)state 10.- (UIImage )backgroundImageForState:(UIControlState)state 11.- (UIImage )imageForState:(UIControlState)state 12.- (void)setBackgroundImage:(UIImage )image forState:(UIControlState)state 13.- (void)setImage:(UIImage )image forState:(UIControlState)state 14.- (CGRect)backgroundRectForBounds:(CGRect)bounds 15.- (CGRect)contentRectForBounds:(CGRect)bonds 16.- (CGRect)titleRectForContentRect:(CGRect)contentRect 17.-(CGRect)imageRectForContentRect:(CGRect)contentRect 来看第一个: 1.+ (instancetype)buttonWithType:(UIButtonType)buttonType。从统计上来看,这是UIButton唯一个一个类方法了,这个方法很重要,它是用来创建button的,也是唯一一个你可以设定button的type的方法,如果你开始的时候使用了alloc init来创建button,那么你就不能再修改该button的type了。 2.- (NSString )titleForState:(UIControlState)state。这个方法是返回在某一个state下面的button的title。 3.- (void)setTitle:(NSString )title forState:(UIControlState)state。这个方法是让你设定具体某个state下的title。 4.- (NSAttributedString )attributedTitleForState:(UIControlState)state。这个方法是返回在某一个state下面的富文本。 5.- (void)setAttributedTitle:(NSAttributedString )title forState:(UIControlState)state。这个方法是让你设定具体某个state下的富文本。 6.- (UIColor )titleColorForState:(UIControlState)state。这个方法是返回在某一个state下面的title的color。 7.- (void)setTitleColor:(UIColor )color froState:(UIControlState)state.这个方法是设定某个具体state下title的color。 8.- (UIColor )titleShadowColorForState:(UIControlState)state。这个方法是返回在某一个state下面的title的shadow的color。 9.- (void)setTitleShadowColor:(UIColor )color forState:(UIControlState)state。这个方法是设定某个具体state下title的shadow的color。 10.- (UIImage )backgroundImageForState:(UIControlState)state。这个方法是返回在某一个state下面的background image。 11.- (UIImage )imageForState:(UIControlState)state。这个方法是返回在某一个state下面的image。 12.- (void)setBackgroundImage:(UIImage )image forState:(UIControlState)state。这个方法是设定某个具体state下的background image。 13.- (void)setImage:(UIImage )image forState:(UIControlState)state这个方法是设定某个具体state下的image。 14.- (CGRect)backgroundRectForBounds:(CGRect)bounds。官方文档有点看不懂,网上资料说是用来在自定义button子类的时候用来确定button大小的。 15.- (CGRect)contentRectForBounds:(CGRect)bonds。同上,用来确定content的大小。 16.- (CGRect)titleRectForContentRect:(CGRect)contentRect。同上,用来确定titleLabel的大小。 17.-(CGRect)imageRectForContentRect:(CGRect)contentRect。同上,用来确定image的大小。

收藏
0
sina weixin mail 回到顶部