因此,我拥有这些文本字段,我意识到它们都具有相同的属性,因此我创建了一个名为“ UserInputs ”的新类,并从进行了扩展UITextField,除一件事外,其他所有内容均正常运行,UITextFieldDelegate功能不起作用,我的意思是当我专注于它们时不起作用,我想在代码中添加它,因为当您专注于我的输入字段时,它们会更改边框,我该如何正确地从UITextField
UITextField
UITextFieldDelegate
我唯一的问题是该功能:
textFieldDidBeginEditing textFieldDidEndEditing
因此不起作用。
这是我 上课的 所有内容:
import Foundation import UIKit class RegistrationViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var firstName: UserInputs! @IBOutlet weak var test: UserInputs! override func viewDidLoad() { super.viewDidLoad() self.firstName.delegate = self self.test.delegate = self } }
这是我的 子类 :
class UserInputs: UITextField{ required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! createBorder() } func createBorder(){ let border = CALayer() let width = CGFloat(2.0) border.borderColor = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor border.frame = CGRect(x: 0, y: self.frame.size.height-width, width: self.frame.size.width, height: self.frame.size.height) border.borderWidth = width self.layer.addSublayer(border) self.layer.masksToBounds = true //print("border created") } func textFieldDidBeginEditing() { print("focused") self.pulseBorderColor() } func textFieldDidEndEditing() { print("lost focus") self.reversePulseBorderColor() } func pulseBorderColor(){ let pulseAnimation = CABasicAnimation(keyPath: "borderColor") pulseAnimation.duration = 0.35 pulseAnimation.fromValue = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor pulseAnimation.toValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).CGColor pulseAnimation.fillMode = kCAFillModeForwards pulseAnimation.removedOnCompletion = false pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) self.layer.sublayers![0].addAnimation(pulseAnimation,forKey: nil) } func reversePulseBorderColor(){ let pulseAnimation = CABasicAnimation(keyPath: "borderColor") pulseAnimation.duration = 0.35 pulseAnimation.fromValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).CGColor pulseAnimation.toValue = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor pulseAnimation.fillMode = kCAFillModeForwards pulseAnimation.removedOnCompletion = false pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) self.layer.sublayers![0].addAnimation(pulseAnimation,forKey: nil) } }
当我没有子类并且在主类中执行此代码时,此代码有效,但是在创建子类焦点函数后,该代码停止工作,其他所有工作
主要问题是我想实施
func textFieldDidBeginEditing() { print("focused") } func textFieldDidEndEditing() { print("lost focus") }
这些在我的文本字段中,所以我不会一遍又一遍地写它
看起来UITextFieldDelegate您的代码中的功能有些偏离。他们应该是:
func textFieldDidBeginEditing(textField: UITextField) { print("focused") } func textFieldDidEndEditing(textField: UITextField) { print("lost focus") }
并且由于您希望UserInputs对象成为它们自己的委托,因此我也添加了该代码。为了证明这一点,我有以下两个文件:
UserInputs
ViewController.swift
import UIKit class ViewController: UIViewController, UITextFieldDelegate { var textField: UserInputs! override func viewDidLoad() { super.viewDidLoad() textField = UserInputs(frame: CGRectMake(100, 100, 200, 40)) view.addSubview(textField!) } }
UserInputs.swift
import UIKit class UserInputs: UITextField, UITextFieldDelegate { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! delegate = self createBorder() } required override init(frame: CGRect) { super.init(frame: frame) delegate = self createBorder() } func createBorder(){ let border = CALayer() let width = CGFloat(2.0) border.borderColor = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor border.frame = CGRect(x: 0, y: self.frame.size.height-width, width: self.frame.size.width, height: self.frame.size.height) border.borderWidth = width self.layer.addSublayer(border) self.layer.masksToBounds = true //print("border created") } func textFieldDidBeginEditing(textField: UITextField) { print("focused") } func textFieldDidEndEditing(textField: UITextField) { print("lost focus") } }