1,UIButton的属性
@property(nonatomic)BOOL adjustsImageWhenHighlighted; // default is YES. if YES, image is drawn darker when highlighted(pressed)
@property(nonatomic)BOOL adjustsImageWhenDisabled; // default is YES. if YES, image is drawn lighter when disabled
2)通过UIControl的这两个属性的 set方法 设置UIButton上文字的对齐方式
@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;
@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment;
3)在UIButton中有三个对EdgeInsets的设置:ContentEdgeInsets、titleEdgeInsets、imageEdgeInsets
通过titleEdgeInsets,imageEdgeInsets,可以控制标题和图片的位置,还能控制图片的大小
@property(nonatomic) UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR; // default is UIEdgeInsetsZero // 按钮content内外线边缘绘制区域.content包含按钮图片和标题
@property(nonatomic) UIEdgeInsets titleEdgeInsets; // default is UIEdgeInsetsZero
@property(nonatomic) UIEdgeInsets imageEdgeInsets; // default is UIEdgeInsetsZero
确定按钮高亮时是否改变阴影的Bool值.默认时NO,当为YES时,阴影在雕刻与浮雕感之间变化(差不多就是去正常offset的相反数作为新的offset)
@property(nonatomic) BOOL reversesTitleShadowWhenHighlighted; // default is NO. if YES, shadow reverses to shift between engrave and emboss appearance
4)得到尺寸
– backgroundRectForBounds: // 返回背景绘制区域.
– contentRectForBounds: // 返回内容绘制区域.内容区域是显示图片和标题及他们特定对齐缩放等的范围.
– titleRectForContentRect: // 返回标题的绘制区域.
– imageRectForContentRect: // 返回图片的绘制区域.
5)其它属性
// 设置边距,边界
@property(nonatomic) UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR;
@property(nonatomic) UIEdgeInsets titleEdgeInsets;
@property(nonatomic) UIEdgeInsets imageEdgeInsets;
// 点击时候是否高亮显示
@property(nonatomic) BOOL showsTouchWhenHighlighted;
// UIButton的类型
@property(nonatomic,readonly) UIButtonType buttonType;
2,UIButton的方法
1)创建一个UIButton一般都使用这个类方法来创建,并设置UIButton的类型,这个类型智能在创建的时候设置,buttonType这个属性是只读的。
+ (id)buttonWithType:(UIButtonType)buttonType;
3,获取UIButton上的文字,图片,背景色等
// 这六个方法,可以获取任意状态下,设置在按钮上的图片、文字、背景颜色等
- (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);
// 这六个属性可以获取 当前状态下,设置的图片的各种属性
@property(nonatomic,readonly,retain) NSString *currentTitle; // normal/highlighted/selected/disabled. can return nil
@property(nonatomic,readonly,retain) UIColor *currentTitleColor; // normal/highlighted/selected/disabled. always returns non-nil. default is white(1,1)
@property(nonatomic,readonly,retain) UIColor *currentTitleShadowColor; // normal/highlighted/selected/disabled. default is white(0,0.5).
@property(nonatomic,readonly,retain) UIImage *currentImage; // normal/highlighted/selected/disabled. can return nil
@property(nonatomic,readonly,retain) UIImage *currentBackgroundImage;// normal/highlighted/selected/disabled. can return nil
@property(nonatomic,readonly,retain) NSAttributedString *currentAttributedTitle NS_AVAILABLE_IOS(6_0); // normal/highlighted/selected/disabled. can return nil
4,问题和补充
1)如果需要在按钮上同时显示出图片和文字的话,可以直接使用UIButton的setImage方法来设置,但是,如果图片尺寸过大的时候,缩小尺寸就会导致文字找不到了,出现这种问题的原因和解决办法如下所示(这样解决了视觉上的问题,但是新问题是,点击文字时候并不会触发按钮的单击事件):
另一种解决自定义button,或者是 使用drawRect重绘图片,改变图片的尺寸。