2017-05-11 15 views
0

私はiOS開発が初めてです。私は私のアプリでXIBを実装しようとしています。このXIBをビューの一部として追加したいのですが、このXIBのサブビュー(ボタン、画像など)で発生しているクリック/タップを取得/捕捉できるようにしたいと考えています。XIB - UIViewまたはUIControllerView

まず、XIBのFile OwnerクラスをUIViewサブクラスに設定しましたが、このサブクラスのClick /タップをViewControllerに処理する方法はありません。

ファイル所有者クラスを代わりにViewControllerクラスに設定する必要がありますか?それは許されますか? XIBで行われたこれらのタップ/クリックはどのように処理する必要がありますか?

答えて

0

いいえ、FileOwnerをViewControllerに設定しないでください。ジェスチャ認識プログラムをViewControllerに追加し、そのジェスチャ認識プログラムをビューに追加する必要があります。

私はスウィフトには分からないが、Objective Cの中で、あなたのようなものだろう:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarger:customView action:@selector(mySelector)];

0

ファイルの所有者は、プロキシまたはスタンドで識別されます実際のオブジェクト用である場合ペン先がロードされます。 [ed。私は "nib"はインターフェイスファイルの古い学校用語であることに注意してください。 xibは新しく抱かれた名前です。実際にxibファイルは、プロジェクトのビルド時にnibファイルにコンパイルされます。私がちょっと古い学校で、nib/xibを同じ意味で使用していると私を許してください]あなたのインターフェースファイルの "File's Owner"としてあなたのView Controllerを使うことができます。それはこのようなものになります使用:このコードスニペットでは

class MyViewController : UIViewController { 
    @IBOutlet loadedView : UIView! 

    func loadMyInterface() { 
     // load the nib with myself as the "Files Owner". If the nib file is set up properly 
     // shoudl set the "loadedView" outlet on this object 
     Bundle.mainBundle.loadNibNamed("MyLoadedView", owner: self, options: nil) 

    } 
} 

を、私はloadedViewコンセントを持っています。ビューコントローラを作成すると、nilになります。そして私のプログラムの実行のある時点で私はloadMyInterfaceと呼んでいます。このルーチンは、メインバンドルにインターフェイスファイル "MyLoadedView"をロードするように要求します。この時点で、 "File's Owner"というオブジェクトがどのようなオブジェクトであるかをシステムに伝えることに注意してください。私はビューコントローラをownerと特定しているので、ファイルの所有者のために識別されたインターフェイスファイル内のアウトレットはそのビューコントローラに配線されます。

さらに、View ControllerクラスでActionsを定義し、インタフェースビルダーの「File's Owner」に接続することができます.Libがロードされると、View Controllerに転送されます。

しかし、これは単に、ペン先がロードされたときに私のビューコントローラをownerと識別したためです。ファイルの所有者として他のオブジェクトを簡単に設定して、所有者のためのアウトレットとアクションがそこに行かなければならないことを指示しました。

0

ボタンやラベル、IBActionなどのコンセントを持つviewControllerと同じように、Xibのカスタムクラスを簡単に作成できます。次に、それに続くプロトコルを作成し、Xibを表示するターゲットMainViewとViewControllerからそのプロトコルにデリゲートを設定します。 Xibのボタンをクリックすると、プロトコルを参照し、viewController内の関数を呼び出します。

のCustomView:

protocol customViewDelegate: class { 
func buttonClicked() 
} 

class CustomView: UIView { 
weak var delegate: customViewDelegate? 

@IBAction func buttonPressed(_ sender: Any) { 
    delegate?.buttonClicked() 
} 
} 

とのViewController:

class viewController: UIViewController { 
@IBOutlet weak var viewContainer: CustomView! 

var customView: CustomView? 

override func viewDidLoad() { 
customView = CustomView.loadFromNib() 
customView.delegate = self 
} 
func buttonClicked() { 
    //Do what you wanted to do when the button inside the Xib was clicked. 
} 
} 
関連する問題