標籤:
在開發安卓項目的時候經常對於常用的功能進行封裝成控制項來使用,一個是減少代碼量,另一個看起來簡潔,而對於蘋果開發也喜歡封裝成控制項,然後再storyboard裡面拖拽,對於IOS開發自己屬於菜鳥層級所以代碼品質不是很高,如果那裡有問題,請指出,這裡記錄一個是備忘另一個希望多多交流。
這篇是自訂輸入框,輸入框在項目中經常用到,最常見的比如左邊是label右邊是textfield,如下:
代碼如下
//// TextFieldValidator.swift// CustomWidget//// Created by System Administrator on 15/3/21.// Copyright (c) 2015年 jwzhangjie. All rights reserved.//import UIKitclass 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 UIKitclass 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會顯示出該類的所有方法
Swift自訂控制項--輸入框