在開發安卓項目的時候經常對於常用的功能進行封裝成控件來使用,一個是減少代碼量,另一個看起來簡潔,而對於蘋果開發也喜歡封裝成控件,然後再storyboard裏面拖拽,對於IOS開發自己屬於菜鳥級別所以代碼質量不是很高,如果那裏有問題,請指出,這裏記錄一個是備忘另一個希望多多交流。
這篇是自定義輸入框,輸入框在項目中經常用到,最常見的比如左邊是label右邊是textfield,效果圖如下:
代碼如下
//
// TextFieldValidator.swift
// CustomWidget
//
// Created by System Administrator on 15/3/21.
// Copyright (c) 2015年 jwzhangjie. All rights reserved.
//
import UIKit
class TextFieldValidator : UIView{
var txtFlag:UILabel!
var txtFieldFlag:UITextField!
var spacing:CGFloat?
var delegate:UITextFieldDelegate?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
txtFlag = UILabel()
txtFieldFlag = UITextField()
}
func initWithFrame(labelText:NSString, text:NSString, placeholder:NSString, spacing:CGFloat){
var width:CGFloat = frame.size.width;
var height:CGFloat = frame.size.height;
txtFlag = UILabel(frame: CGRectMake(0, 0, width / 3, height))
txtFlag.backgroundColor = UIColor.clearColor()
txtFlag.textAlignment = NSTextAlignment.Left
self.spacing = spacing
self.addSubview(txtFlag)
txtFieldFlag = UITextField(frame: CGRectMake(width / 3 + spacing, 0, width-width/3 + spacing, height))
txtFieldFlag.borderStyle = UITextBorderStyle.RoundedRect
txtFieldFlag.clearButtonMode = UITextFieldViewMode.Always
self.addSubview(txtFieldFlag)
setText(text)
setLabelText(labelText)
txtFieldFlag.placeholder = placeholder
}
func initWithFrame(labelText:NSString, placeholder:NSString, spacing:CGFloat){
return initWithFrame(labelText, text: "", placeholder: placeholder, spacing: spacing)
}
func initWithFrame(labelText:NSString, placeholder:NSString){
return initWithFrame(labelText, text: "", placeholder: placeholder, spacing: 0)
}
func setDelegate(delegate:UITextFieldDelegate){
self.delegate = delegate
txtFieldFlag.delegate = delegate
}
func setLeftTextFlag(text:NSString){
txtFlag.text = text
}
func setLabelText(text:NSString){
txtFlag.text = text
}
func setText(text:NSString){
txtFieldFlag.text = text
}
func getText()->NSString{
return txtFieldFlag.text;
}
func setTxtFlagAlignment(option:NSTextAlignment){
txtFlag.textAlignment = option
}
func setSpacing(spacing:CGFloat){
self.spacing = spacing;
txtFieldFlag.frame=CGRectMake(txtFlag.frame.size.width+spacing, 0, self.frame.size.width-txtFlag.frame.size.width-spacing, self.frame.size.height);
}
func setSecureTextEntry(option:Bool){
txtFieldFlag.secureTextEntry = option
}
func setClearButtonMode(mode:UITextFieldViewMode){
txtFieldFlag.clearButtonMode = mode
}
func setReturnKey(type:UIReturnKeyType){
txtFieldFlag.returnKeyType = type
}
}
//
// ViewController.swift
// CustomWidget
//
// Created by System Administrator on 15/3/21.
// Copyright (c) 2015年 jwzhangjie. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var userName: TextFieldValidator!
@IBOutlet weak var userPasswd: TextFieldValidator!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
userName.initWithFrame("用戶名", placeholder: "請輸入用戶名")
userName.setReturnKey(UIReturnKeyType.Next)
userPasswd.initWithFrame("密碼", placeholder: "請輸入用戶密碼")
userPasswd.setSecureTextEntry(true)
userPasswd.setReturnKey(UIReturnKeyType.Done)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
注意點:
如何將自定義控件加入storyboard?
由於自定義控件不是系統控件,所以能直接在Xcode中拖拽,首先需要拖拽自定義的父類,比如這裏繼承的是UIView,所以從Xcode中拖拽一個UIView到storyboard中,然後將UIView的class設置爲自定義控件名稱
查看類中的所有方法的快捷鍵?
在空白處,點擊esc會顯示出該類的所有方法