在自定义UiView中设置UiTextField委托方法的位置

Gau*_*rav 7 uitextfielddelegate swift tvos

设置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)


}
}
Run Code Online (Sandbox Code Playgroud)

错误信息是:

fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

我使用XIB.pls建议使用自定义警报视图建议任何解决方案.

Ole*_*huk 8

首先来看看视图的生命周期.根据这一点,可以突出显示该方法awakeFromNib非常合适,因为:

nib加载基础结构将awakeFromNib消息发送到从nib归档重新创建的每个对象,但只有在归档中的所有对象都已加载并初始化之后.当一个对象收到一个awakeFromNib消息时,它保证已经建立了所有的插座和动作连接.