1 //
2 // UIButton1.h
3 // UIKit
4 //http://blog.163.com/fuxiaohui@126/blog/static/131745826201172601821628/
5 // Copyright (c) 2005-2013, Apple Inc. All rights reserved.
6 //
7
8 #import <Foundation/Foundation.h>
9 #import <UIKit/UIControl.h>
10 #import <UIKit/UIGeometry.h>
11 #import <UIKit/UIStringDrawing.h>
12 #import <UIKit/UIKitDefines.h>
13
14 @class UIImage, UIFont, UIColor, UIImageView, UILabel;
15
16 //button类型
17 typedef NS_ENUM(NSInteger, UIButtonType) {
18 UIButtonTypeCustom = 0, //自定义 // no button type
19 UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // standard system button
20
21 UIButtonTypeDetailDisclosure,
22 UIButtonTypeInfoLight,
23 UIButtonTypeInfoDark,
24 UIButtonTypeContactAdd,
25
26 UIButtonTypeRoundedRect = UIButtonTypeSystem, // Deprecated(已过时), use UIButtonTypeSystem instead(代替)
27 };
28
29 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIButton : UIControl <NSCoding> {
30 @private
31 //Edge n. 边缘; inset vt. 嵌入;插入
32 //UIEdgeInsets==>这货其实就是插入间隔区域。正值表示间隔值,负值表示超出参照物的距离。
33 //UIEdgeInsets insets = {top, left, bottom, right}; 默认都为0
34 CFMutableDictionaryRef _contentLookup;
35 UIEdgeInsets _contentEdgeInsets;
36 UIEdgeInsets _titleEdgeInsets;
37 UIEdgeInsets _imageEdgeInsets;
38 UIImageView *_backgroundView;
39 UIImageView *_imageView;
40 UILabel *_titleView;
41 BOOL _initialized;
42 UIControlState _lastDrawingControlState;
43 struct {
44 unsigned int reversesTitleShadowWhenHighlighted:1;
45 unsigned int adjustsImageWhenHighlighted:1;
46 unsigned int adjustsImageWhenDisabled:1;
47 unsigned int autosizeToFit:1;
48 unsigned int disabledDimsImage:1;
49 unsigned int showsTouchWhenHighlighted:1;
50 unsigned int buttonType:8;
51 unsigned int shouldHandleScrollerMouseEvent:1;
52 unsigned int titleFrozen:1;
53 } _buttonFlags;
54 }
55
56 + (id)buttonWithType:(UIButtonType)buttonType;
57 ////默认为UIEdgeInsetsZero
58 @property(nonatomic) UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR; // default is UIEdgeInsetsZero
59 @property(nonatomic) UIEdgeInsets titleEdgeInsets; // default is UIEdgeInsetsZero
60 //默认为NO.如果为YES,当按钮的状态进行切换时,文本的影子会反转
61 @property(nonatomic) BOOL reversesTitleShadowWhenHighlighted; // default is NO. if YES, shadow reverses to shift between engrave and emboss appearance
62 @property(nonatomic) UIEdgeInsets imageEdgeInsets; // default is UIEdgeInsetsZero
63 //默认为YES.如果为YES,当按钮状态为高亮时,图像变暗
64 @property(nonatomic) BOOL adjustsImageWhenHighlighted; // default is YES. if YES, image is drawn darker when highlighted(pressed)
65 //默认为YES.如果为YES,当按钮状态为禁用时,图像变暗
66 @property(nonatomic) BOOL adjustsImageWhenDisabled; // default is YES. if YES, image is drawn lighter when disabled
67 //默认为NO.如果为YES, 当按钮状态为高亮时,显示一个简单的反馈(类似于光环)
68 @property(nonatomic) BOOL showsTouchWhenHighlighted; // default is NO. if YES, show a simple feedback (currently a glow) while highlighted
69 @property(nonatomic,retain) UIColor *tintColor NS_AVAILABLE_IOS(5_0); // The tintColor is inherited through the superview hierarchy. See UIView for more information.
70 @property(nonatomic,readonly) UIButtonType buttonType;
71
72 // you can set the image, title color, title shadow color, and background image to use for each state. you can specify data
73 // for a combined state by using the flags added together. in general, you should specify a value for the normal state to be used
74 // by other states which don't have a custom value set
75
76 - (void)setTitle:(NSString *)title forState:(UIControlState)state; // default is nil. title is assumed to be single line
77 - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default if nil. use opaque white
78 - (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default is nil. use 50% black
79 - (void)setImage:(UIImage *)image forState:(UIControlState)state; // default is nil. should be same size if different for different states
80 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default is nil
81 - (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state NS_AVAILABLE_IOS(6_0); // default is nil. title is assumed to be single line
82
83 - (NSString *)titleForState:(UIControlState)state; // these getters only take a single state value
84 - (UIColor *)titleColorForState:(UIControlState)state;
85 - (UIColor *)titleShadowColorForState:(UIControlState)state;
86 - (UIImage *)imageForState:(UIControlState)state;
87 - (UIImage *)backgroundImageForState:(UIControlState)state;
88 - (NSAttributedString *)attributedTitleForState:(UIControlState)state NS_AVAILABLE_IOS(6_0);
89
90 // these are the values that will be used for the current state. you can also use these for overrides. a heuristic will be used to
91 // determine what image to choose based on the explict states set. For example, the 'normal' state value will be used for all states
92 // that don't have their own image defined.
93
94 @property(nonatomic,readonly,retain) NSString *currentTitle; // normal/highlighted/selected/disabled. can return nil
95 @property(nonatomic,readonly,retain) UIColor *currentTitleColor; // normal/highlighted/selected/disabled. always returns non-nil. default is white(1,1)
96 @property(nonatomic,readonly,retain) UIColor *currentTitleShadowColor; // normal/highlighted/selected/disabled. default is white(0,0.5).
97 @property(nonatomic,readonly,retain) UIImage *currentImage; // normal/highlighted/selected/disabled. can return nil
98 @property(nonatomic,readonly,retain) UIImage *currentBackgroundImage; // normal/highlighted/selected/disabled. can return nil
99 @property(nonatomic,readonly,retain) NSAttributedString *currentAttributedTitle NS_AVAILABLE_IOS(6_0); // normal/highlighted/selected/disabled. can return nil
100
101 // return title and image views. will always create them if necessary. always returns nil for system buttons
102 @property(nonatomic,readonly,retain) UILabel *titleLabel NS_AVAILABLE_IOS(3_0);
103 @property(nonatomic,readonly,retain) UIImageView *imageView NS_AVAILABLE_IOS(3_0);
104
105 // these return the rectangle for the background (assumes bounds), the content (image + title) and for the image and title separately. the content rect is calculated based
106 // on the title and image size and padding and then adjusted based on the control content alignment. there are no draw methods since the contents
107 // are rendered in separate subviews (UIImageView, UILabel)
108
109 - (CGRect)backgroundRectForBounds:(CGRect)bounds;
110 - (CGRect)contentRectForBounds:(CGRect)bounds;
111 - (CGRect)titleRectForContentRect:(CGRect)contentRect;
112 - (CGRect)imageRectForContentRect:(CGRect)contentRect;
113 @end
114
115 @interface UIButton(UIButtonDeprecated)
116
117 @property(nonatomic,retain) UIFont *font NS_DEPRECATED_IOS(2_0, 3_0);
118 @property(nonatomic) NSLineBreakMode lineBreakMode NS_DEPRECATED_IOS(2_0, 3_0);
119 @property(nonatomic) CGSize titleShadowOffset NS_DEPRECATED_IOS(2_0, 3_0);
120
121 @end