2017-01-12 21 views
0

私はストーリーボード(Xcode 8.2.1)でUIViewを作成しました。内部のものをUIViewクラス名LoginViewに参照します。間違って1つ削除すると、Bundle.main.loadNibNamed("LoginView", owner: self, options: nil)の行にエラーが表示されます。 EXC_BAD_ACCESS(code=2,....)私はここで何らかの答えを読んでいます。私はすべてを再び参照しようとしますが、まだエラーです。私は今何を参照すればいいのか混乱している。ファイル所有者またはビュー。UIViewの参照エラー

編集:このビューがレンダリングされるとバグが発生します。

LoginView.swift

import UIKit 

class LoginView: UIView { 

@IBOutlet var view: UIView! 
@IBOutlet weak var emailField: UITextField! 
@IBOutlet weak var passwordField: UITextField! 
@IBOutlet weak var forgotPasswordBtn: UIButton! 

required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 

     Bundle.main.loadNibNamed("LoginView", owner: self, options: nil) 
     self.addSubview(view) 
     view.frame = self.bounds 
     emailField.becomeFirstResponder() 

     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIInputViewController.dismissKeyboard)) 
     view.addGestureRecognizer(tap) 

    } 

    func dismissKeyboard() { 
     view.endEditing(true) 
    } 
} 

これはLoginViewストーリーボードに私のコンポーネント

enter image description here

であり、これは私の参照です。

enter image description here

+0

'self.endEditing(true)'を試したことがありますか? –

+0

どこに置いたらいいですか?あなたは私が本当に初心者であることを説明できますか – Natsathorn

+0

LoginViewのリファレンスをプロジェクトから削除してから、もう一度追加してみてください。 –

答えて

0

CocoaPodは(制約付き)ビューにペン先を設定するだけでなく、あなたがストーリーボードにあなたのペン先ベース・ビューを見ることができるビューIBDesignableを作るだけでなく、NibDesignableと呼ばれてあります。

NibDesignableでは、nibのビューのカスタムクラスではなく、nibのファイル所有者をビュークラスに変更する必要があります。また、アウトレット接続は、ファイルの所有者から行う必要があり、ペン先のビューから行う必要はありません。

@IBDesignable class LoginView: NibDesignable { 

    // MARK: Outlets 

    @IBOutlet weak var emailField: UITextField! 
    @IBOutlet weak var passwordField: UITextField! 
    @IBOutlet weak var forgotPasswordBtn: UIButton! 

    // MARK: Properties 

    var tap: UITapGestureRecognizer? { 
     willSet { 
      tap.flatMap { removeGestureRecognizer($0) } 
     } 
     didSet { 
      tap.flatMap { addGestureRecognizer($0) } 
     } 
    } 

    // MARK: Lifecycle 

    required init?(coder aDecoder: NSCoder) { 

     super.init(coder: aDecoder) 

     tap = UITapGestureRecognizer(
      target: self, 
      action: #selector(didRecognizeTapGesture) 
     ) 

     emailField.becomeFirstResponder() 
    } 

    // MARK: Actions 

    @IBAction func didRecognizeTapGesture() { 

     endEditing(true) 
    } 
} 
+0

ちょうど今のところ、Cocoapodsは使用できない/廃止されているので** Carthage **のように見えます。 – Fattie