2016-12-21 9 views
3

私はUICollectionビューのヘッダーにTap Gesture Recognizerを追加しようとしていますが、何に関係なく、numberOfPostsViewTapped()関数を呼び出すことができません。私は何時間も試してきましたが、ヘッダービューで他のビューやラベルなどの他のUI要素を使用しようとしましたが、何も役立たないものです。いくつかの指針は非常に高く評価されます。UICollectionViewヘッダーのUITapGestureRecognizerが機能しませんか?

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 

    switch kind { 

    case UICollectionElementKindSectionHeader: // only checking header - no footer on this view 

     // use an external class for the header UICollectionViewCell in order to set outlets on a non-reusable cell 
     // if you try to set outlets on a reusable cell, such as a header, it will fail 
     let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Header", forIndexPath: indexPath) as! ProfileCollectionViewHeader 

     // dynamically set user profile information 
     headerView.usernameTextLabel.text = user?.name 
     headerView.numberOfPostsTextLabel.text = user?.numberOfPosts != nil ? "\(user!.numberOfPosts!)" : "0" 

     let numberOfPostsViewSelector : Selector = #selector(self.numberOfPostsViewTapped) 
     let viewPostsViewGesture = UITapGestureRecognizer(target: self, action: numberOfPostsViewSelector) 
     viewPostsViewGesture.numberOfTapsRequired = 1 
     viewPostsViewGesture.delaysTouchesBegan = true 
     headerView.numberOfPostsTextLabel.userInteractionEnabled = true; 
     headerView.numberOfPostsTextLabel.addGestureRecognizer(viewPostsViewGesture) 

     return headerView 

    default: 

     assert(false, "Unexpected element kind") 

    } 
} 
func numberOfPostsViewTapped(sender: UITapGestureRecognizer){ 
    print("HErE") 
} 
+0

式「#selector(self.numberOfPostsViewTapped)」もコンパイルされますか?あなたのコードを見ると、正しいセレクタは '#selector(self.numberOfPostsViewTapped(sender :))'でなければなりません。 – crizzis

+0

私はコンパイルします...あなたの行に置き換えられ、エラーが発生しました。 'ProfileViewController.swift:117:66: 'ProfileViewController'タイプの値にメンバー 'numberOfPostsViewTapped(送信者:)'がありません。 ' – oppositemind

答えて

1

フレームを確認してください。 UICollectionViewはフレーム内にありますか?

ビューがそのフレームから外れていて、その境界にクリップしていない場合は、ビューの内容が表示されますが、ユーザーの操作は機能しません。

+0

それはフレームの中にある?それは正しく表示されています(リンク:http://screencast.com/t/fkB1NSz09Q) – oppositemind

+0

これをチェックする最も簡単な方法はおそらくフレームをNSLog(@フレームのようなUICollectionViewの 'layoutSubviews'のような場所に記録することです:%@ "、NSStringFromCGRect(self.frame));'(Objective-Cの構文では、Swiftの構文がわかりません、ごめんなさい、私は何を意味するのか分かります) –

+0

私はこのコメントを追加しました: オーバーライドfunc viewDidLayoutSubviews(){ print( "フレームアウト:%@"、NSStringFromCGRect(collectionView.frame));print } そして、これが印刷されたものです: はサブビュー フレームレイアウト:%の@ {{0、64}、{414、607}} を私はこれが私の問題に何を意味するのかわからないんだけど? – oppositemind

0

私はあなたのheaderViewにtrueを設定する必要があると思うので、タップがあなたのheaderViewの子であるあなたのラベルに届きます。

headerView.userInteractionEnabled = true 
+0

私はそれを加えましたが、それは何の効果もないようです。この問題のデバッグを開始する方法がわからない – oppositemind

関連する問題