2016-09-21 14 views
7

UITextField temsilcisini ayarladığımda hata oluşur.Özel UiView'da UiTextField temsilci yönteminin ayarlanması

Benim kodudur:

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) 


} 
} 

Hata iletisi:

fatal error: unexpectedly found nil while unwrapping an Optional value 

Ben XIB.pls kullanarak Özel Uyarı Görünüm kullanmış herhangi bir çözüm önerebilir.

+0

Hata mesajı nedir? –

+0

Önemli hata: Beklenmeyen bir seçenek çıkarılırken beklenmeyen şekilde sıfır bulundu – Gaurav

cevap

8

Öncelikle görünümün yaşam döngüsüne bakın.

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.

2

ayrıca Nib kodu eklemek gerekir, .Xib içerik görünümü için bir @IBOutlet koymak emin olun: çünkü bu bağlı olarak, bu yöntemi awakeFromNib vurgulamak mümkündür oldukça uygundur. Son olarak, ViewController'ınızda UIView Çıkışınızı UserAlertVC olarak ayarladığınızdan ve awakeFromNib yöntemini eklediğinizden emin olun. Kodu ekte bulabilirsiniz. Daha fazla yardıma ihtiyacın olursa haberim olsun.

.xib dosyasıyla ilgili kod İşte.

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 

} 

İşte ViewController ile ilgili kod.

class ViewController: UIViewController { 

//MARK: - Outlets 

@IBOutlet weak var userAlertVC: UserAlertVC! 

//MARK: - Loads 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

}