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

时间:2016-09-21 13:23:19

标签: swift tvos uitextfielddelegate

设置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建议使用自定义警报视图建议任何解决方案。

2 个答案:

答案 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()
}

}