[iOS] UITextField & UITestView
Keyboard Events
隨著Keyboard event調整View的origin.y:
func registerKeyboardNotifications(){
NotificationCenter.default.addObserver(self, selector: #selector(kyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(UIKeyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func deregisterKeyboardNotifications(){
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc func kyboardWillShow(notification: NSNotification){
var info = notification.userInfo!
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
UIView.animate(withDuration: 0.25) {
self.view.frame.origin.y = -keyboardSize!.height //Keyboard Height
}
}
@objc func UIKeyboardWillHide(notification: NSNotification){
UIView.animate(withDuration: 0.25) {
self.view.frame.origin.y = 0
}
}
UITextField
return收起鍵盤:
extension Viewcontroller: UITextFieldDelegate {
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
使用IBDesignable 製作一個擁有Left Icon的TextField:
@IBDesignable
class FCUITextField: UITextField {
//left padding for image
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var textRect = super.leftViewRect(forBounds: bounds)
textRect.origin.x += leftPadding
return textRect
}
@IBInspectable var leftImage: UIImage? {
didSet {
updateUI()
}
}
@IBInspectable var leftPadding: CGFloat = 0
@IBInspectable var color: UIColor = UIColor.darkGray {
didSet {
updateUI()
}
}
func updateUI() {
if let image = leftImage {
leftViewMode = UITextFieldViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
imageView.tintColor = color
leftView = imageView
} else {
leftViewMode = UITextFieldViewMode.never
leftView = nil
}
// Placeholder text color
attributedPlaceholder = NSAttributedString(string: placeholder != nil ? placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: color])
}
}
IDE效果
運行效果
其中color參數為imageView的tintColor, 使用的image需放在xcassets檔中, 必把Render as參數設為
"Template Image" 方能使用
UITestView
Last updated