自定義視圖

自定義視圖可以自己組合視圖, 提高代碼的複用性, 可移植性等.
自己封裝的視圖就像系統的 UI 控件一樣, 可大大降低開發成本, 提高開發效率.
需要注意的是自定義視圖同樣繼承於 UIView. 在自定義視圖中的.h文件中要定義一些接口, 用於在外界操作自定義視圖.
在組合視圖中定義延展, 在延展中定義該組合視圖中的控件屬性 :

@interface combinationView ()
@property (nonatomic, retain) UILabel *leftLabel;
@property (nonatomic, retain) UITextField *rightTextField;
@end

在.m文件中重寫初始化方法:

//重寫初始化方法
- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if(self) {
        //加載自身控件
        //左 Label
        [self setUpLeftLabelWithWidth:frame.size.width Height:frame.size.height];
        //右 TextField
        [self setUpRightTextFieldWithWidth:frame.size.width Height:frame.size.height];
    }
    return self;
}
//創建 label
- (void)setUpLeftLabelWithWidth:(CGFloat)width Height:(CGFloat)height {
    self.leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 1, width / 3, height - 2)];
    [self addSubview:_leftLabel];
    [_leftLabel release];

}
//創建 textField
- (void)setUpRightTextFieldWithWidth:(CGFloat)width Height:(CGFloat)height {
    self.rightTextField = [[UITextField alloc] initWithFrame:CGRectMake(width / 3, 1, width / 3 * 2, height - 2)];
    _rightTextField.borderStyle = UITextBorderStyleRoundedRect;//設置圓角
    [self addSubview:_rightTextField];
    [_rightTextField release];
}

在 .m 文件中實現 .h 文件中的接口 :
這裏的這些接口可以用來設置組合視圖中控件的屬性, 例如:

<----! combinationView.h>
//給 Label 設置文字的接口
- (void)setLabelText:(NSString *)text;
//給 TextField 設置佔位符的接口
- (void)setTextFieldPlacehoder:(NSString *)placeholder;
//給TextField 設置鍵盤類型的接口
- (void)setKeyboardType:(UIKeyboardType)keyboardType;
//給 textField 設置密碼格式
- (void)setSecureText:(BOOL)secureTextEntry;
//獲取 textField 中輸入文字的接口
- (NSString *)getTextFieldText;
//給 TextField 設置代理的接口
- (void)setDelegate:(id<UITextFieldDelegate>)delegate;
<---- ! combinationView.m>
//給 Label 設置文字的接口
- (void)setLabelText:(NSString *)text {
    self.leftLabel.text = text;
}

//給 TextField 設置佔位符的接口
- (void)setTextFieldPlacehoder:(NSString *)placeholder {
    self.rightTextField.placeholder = placeholder;
}

//給TextField 設置鍵盤類型的接口
- (void)setKeyboardType:(UIKeyboardType)keyboardType {
    self.rightTextField.keyboardType = keyboardType;
}

//給 textField 設置密碼格式
- (void)setSecureText:(BOOL)secureTextEntry {
    self.rightTextField.secureTextEntry = secureTextEntry;
}

//獲取 textField 中輸入文字的接口
- (NSString *)getTextFieldText {
    return self.rightTextField.text;
}

//給 TextField 設置代理的接口,  例如在視圖控制器裏用 combinationView , 就要設置把視圖控制器的 self 傳進來, 還要設置視圖控制器遵從 UITextFieldDelegate 協議
- (void)setDelegate:(id<UITextFieldDelegate>)delegate {
    self.rightTextField.delegate = delegate;//外界傳入的參數是誰, 誰就是 textField 的代理
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章