4

UIScrollViewをの中で正しく動作させようとしていUICollectionViewCellます。

カスタム セルは xib ファイルを介してロードされており、のサブクラスですUICollectionViewCellUICollecitonViewセルにタッチを渡していないように見えるため、ボタンやジェスチャ認識など、他のコントロールを機能させるのに問題がありましたが、ジェスチャ認識UICollectionView自体でそれらを回避しました. 私が抱えている残りの問題はUIScrollViewsです...

UICollectionView水平方向にUIScrollViewスクロールし、セル内は垂直方向にスクロールします。a を使用してスクロールしようとしましたUIPanGestureRecognizerが、スクロールする機能が無効になっているようUICollectionView'sです。

誰か考えはありますか?

編集:わかりました!

そのため、iOS6 より前に使用していた以前のサードパーティ ライブラリからコレクション ビューに変換しました。問題は、セルに使用していた xib ファイルにあることがわかりました。以前のライブラリでは、セルは UIView の単なるサブクラスでした。クラスをサブクラスに変更しUICollectionViewCell、カスタム クラスを更新しました。これでは不十分であることがわかりました。タッチがセルに渡されるようにするためにはUICollectionViewCell、オブジェクト ライブラリから新しい を実際にドラッグし、すべてのサブビューをコピーして を再接続する必要がありましたIBOutlets。この後、うまくいきました!

4

2 に答える 2

0

メインスレッドでスクロールビューのサイズ変更が行われるようにすることで、コードでこれを修正しました。

私のコレクション ビューは、ブロック呼び出しを使用して選択したセルを更新する nsfetchedresultscontroller を使用しています。初めてセルが選択されたとき、スクロールビューはスクロールしませんでした。ただし、別のセルをクリックして元に戻すと、正常に機能します。セルの初期ロードは、動作に影響を与えるためにメインスレッド上にある必要がある場所に size calc が存在しない可能性があるように見えました。

-(UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell =  [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
    dispatch_async(dispatch_get_main_queue(), ^{
        // resizeScrollViewMethod should be where scrollview content size > scroll view frame.
        [cell resizeScrollViewMethod];
    });
    return cell;
}

- (void) resizeScrollViewMethod {
    //Do your scrollview size calculation here
}
于 2014-04-17T15:47:32.837 に答える
-2

UICollectionViewCell の UISCrollView で問題ありません。StoryBoard を使用すると、問題なくスクロールできます。UIScrollView オーバーレイ UICollectionViewCell により、didSelect は ScrollView の外側とセルの内側 (scrollView.frame < cell.frame) をタップした場合にのみ機能します。

タップやその他のジェスチャーを実装したい場合は、awakeFromNib の UIScrollView に追加するだけです

参照コード:

https://github.com/lequysang/github_zip/blob/master/CollectionViewWithCellScrollViewStoryBoard.zip

于 2013-03-14T01:43:55.100 に答える