设置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建议使用自定义警报视图建议任何解决方案。
答案 0 :(得分:8)
首先看一下视图的生命周期。根据这一点,可以强调方法awakeFromNib
非常合适,因为:
nib加载基础结构向每个基础结构发送awakeFromNib消息 从nib存档重新创建的对象,但仅在所有对象之后 存档已加载并初始化。当一个对象收到 一个awakeFromNib消息,它保证有所有的插座和 行动关系已经建立。
答案 1 :(得分:3)
确保为.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()
}
}