在自定义 UiView 中的何处设置 UiTextField 委托方法
Where to set UiTextField delegate method in custom UiView
设置 UITextField 委托时发生错误。
我的代码是:
import UIKit
class UserAlertVC: UIView , UITextFieldDelegate {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.addBehavior()
}
func addBehavior (){
print("Add all the behavior here")
userNameTxtField.delegate = self
passwordTxtField.delegate = self
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
}
@available(tvOS 10.0, *)
func textFieldDidEndEditing(textField: UITextField, reason: UITextFieldDidEndEditingReason) {
}
@IBAction func actionOnCancel(sender: UIButton) {
self .removeFromSuperview()
}
@IBAction func actionOnProceed(sender: UIButton) {
self .removeFromSuperview()
UserAlertVC.showAlertForUser()
}
@IBOutlet var userNameTxtField: UITextField!
@IBOutlet var passwordTxtField: UITextField!
static func showAlertForUser() {
let alert = NSBundle.mainBundle().loadNibNamed("KeyboardViewController", owner: self, options: nil)!.last as! UIView
let windows = UIApplication.sharedApplication().windows
let lastWindow = windows.last
alert.frame = UIScreen.mainScreen().bounds
lastWindow?.addSubview(alert)
}
}
错误信息是:
fatal error: unexpectedly found nil while unwrapping an Optional value
我使用自定义警报视图 XIB.pls 建议任何解决方案。
首先看一下视图的生命周期。根据这一点,可以强调方法 awakeFromNib
非常合适,因为:
The nib-loading infrastructure sends an awakeFromNib message to each
object recreated from a nib archive, but only after all the objects in
the archive have been loaded and initialized. When an object receives
an awakeFromNib message, it is guaranteed to have all its outlet and
action connections already established.
确保为.Xib 内容视图添加一个@IBOutlet,您还需要添加Nib 代码。最后,确保在 ViewController 中将 UIView Outlet 设置为 UserAlertVC 并添加 awakeFromNib 方法。请找到附件中的代码。如果您需要进一步的帮助,请告诉我。
这是与.xib文件相关的代码。
import UIKit
class UserAlertVC: UIView, UITextFieldDelegate {
//MARK: - Outlets
@IBOutlet var contentView: UIView!
@IBOutlet var userNameTxtField: UITextField!
@IBOutlet var passwordTxtField: UITextField!
//MARK: - Loads
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
commonInit()
}
//MARK: - Functions
func commonInit() {
Bundle.main.loadNibNamed("UserAlertVC", owner: self, options: nil)
userNameTxtField.delegate = self
passwordTxtField.delegate = self
contentView.translatesAutoresizingMaskIntoConstraints = false
addSubview(contentView)
// add constraints programmatically
}
// add the rest of your code
}
这是与ViewController相关的代码。
class ViewController: UIViewController {
//MARK: - Outlets
@IBOutlet weak var userAlertVC: UserAlertVC!
//MARK: - Loads
override func viewDidLoad() {
super.viewDidLoad()
}
override func awakeFromNib() {
super.awakeFromNib()
}
}
设置 UITextField 委托时发生错误。
我的代码是:
import UIKit
class UserAlertVC: UIView , UITextFieldDelegate {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.addBehavior()
}
func addBehavior (){
print("Add all the behavior here")
userNameTxtField.delegate = self
passwordTxtField.delegate = self
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
}
@available(tvOS 10.0, *)
func textFieldDidEndEditing(textField: UITextField, reason: UITextFieldDidEndEditingReason) {
}
@IBAction func actionOnCancel(sender: UIButton) {
self .removeFromSuperview()
}
@IBAction func actionOnProceed(sender: UIButton) {
self .removeFromSuperview()
UserAlertVC.showAlertForUser()
}
@IBOutlet var userNameTxtField: UITextField!
@IBOutlet var passwordTxtField: UITextField!
static func showAlertForUser() {
let alert = NSBundle.mainBundle().loadNibNamed("KeyboardViewController", owner: self, options: nil)!.last as! UIView
let windows = UIApplication.sharedApplication().windows
let lastWindow = windows.last
alert.frame = UIScreen.mainScreen().bounds
lastWindow?.addSubview(alert)
}
}
错误信息是:
fatal error: unexpectedly found nil while unwrapping an Optional value
我使用自定义警报视图 XIB.pls 建议任何解决方案。
首先看一下视图的生命周期。根据这一点,可以强调方法 awakeFromNib
非常合适,因为:
The nib-loading infrastructure sends an awakeFromNib message to each object recreated from a nib archive, but only after all the objects in the archive have been loaded and initialized. When an object receives an awakeFromNib message, it is guaranteed to have all its outlet and action connections already established.
确保为.Xib 内容视图添加一个@IBOutlet,您还需要添加Nib 代码。最后,确保在 ViewController 中将 UIView Outlet 设置为 UserAlertVC 并添加 awakeFromNib 方法。请找到附件中的代码。如果您需要进一步的帮助,请告诉我。
这是与.xib文件相关的代码。
import UIKit
class UserAlertVC: UIView, UITextFieldDelegate {
//MARK: - Outlets
@IBOutlet var contentView: UIView!
@IBOutlet var userNameTxtField: UITextField!
@IBOutlet var passwordTxtField: UITextField!
//MARK: - Loads
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
commonInit()
}
//MARK: - Functions
func commonInit() {
Bundle.main.loadNibNamed("UserAlertVC", owner: self, options: nil)
userNameTxtField.delegate = self
passwordTxtField.delegate = self
contentView.translatesAutoresizingMaskIntoConstraints = false
addSubview(contentView)
// add constraints programmatically
}
// add the rest of your code
}
这是与ViewController相关的代码。
class ViewController: UIViewController {
//MARK: - Outlets
@IBOutlet weak var userAlertVC: UserAlertVC!
//MARK: - Loads
override func viewDidLoad() {
super.viewDidLoad()
}
override func awakeFromNib() {
super.awakeFromNib()
}
}