2016-09-21 15 views
7

में UiTextField प्रतिनिधि विधि को कहां सेट करें जब मैं UITextField प्रतिनिधि सेट करता हूं तो त्रुटि होती है।कस्टम UiView

मेरे कोड है:

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

त्रुटि संदेश क्या है? –

+0

घातक त्रुटि: वैकल्पिक मूल्य को अनचाहे करते समय अनपेक्षित रूप से शून्य मिली – Gaurav

उत्तर

8

सबसे पहले दृश्य के जीवन चक्र पर नज़र डालें।

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

.xib सामग्री को देखने के लिए एक @IBOutlet डाल करने के लिए सुनिश्चित करें, यह भी आप नोक कोड जोड़ने की जरूरत: क्योंकि इस पर निर्भर करता है यह है कि विधि awakeFromNib उजागर करने के लिए संभव है काफी उपयुक्त है। अंत में, अपने व्यू कंट्रोलर में सुनिश्चित करें कि आपने अपना UIView आउटलेट 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 

} 

यहां व्यू कंट्रोलर से संबंधित कोड है।

class ViewController: UIViewController { 

//MARK: - Outlets 

@IBOutlet weak var userAlertVC: UserAlertVC! 

//MARK: - Loads 

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

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

}