2016-06-26 13 views
0

デバイスフォトライブラリのすべての写真が表示されるUICollectionViewがあります。セル(写真)をタップすると、編集可能なビューコントローラーが表示されます。このビューには、ユーザーをUICollectionViewに戻すための「写真の追加」ボタンがあります(別の写真を選択するため)。私はスクロール位置のために、アニメーションやジャンプなしで、ビューの中心にある以前にタップされたセルを「フォーカスする」必要があります。セルをタップした後のUICollectionViewの同じスクロール位置に戻る

タップしたindexPathを変数として保存してから、viewDidAppearでscrollToItemAtIndexPathを使用してそのindexPathまでスクロールしてみました。問題は、(インデックスパスを保存するための)変数をセルタップに更新する方法を見つけることができないことです。 didSelectItemAtIndexPathでこれを試しましたが、値は実際には保存されません。

var cellTappedIndexPath = Int() 

インサイドdidSelectItemAtIndexPath:

cellTappedIndexPath = indexPath.row 

cellTappedIndexPathの値が保存されますことはありません。

はただscrollToItemAtIndexPathをテストするために、私はviewDidAppearに以下を追加しました:

customViewCollectionView.scrollToItemAtIndexPath(NSIndexPath(forItem: 25, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.CenteredVertically, animated: false) 
// 25 is just a number I have set for testing. Ultimately, I would like this to be the saved indexPath of the last tapped cell. 

これは完全に読み込まだ後、25のセルに「ジャンプ」するcollectionViewの原因となります。アニメーションをtrueに設定すると、上部にロードされ、次にセル25までスクロールします。希望の結果ではありません。

ここでは2つのことをしたいだけです。 1 - タップされたセルを変数として保存します。 2 - scrollToItemAtIndexPath(#1の変数を使用)を使用すると、ビューはちょうど真ん中にタップされた最後のセル、アニメーションなしなどで即座に読み込まれます。

さらに詳しい説明が必要な場合は教えてください。ありがとう!

+0

cellTappedIndexPathへの参照は、ViewControllerのプロパティなど、どこかに保存する必要があります。あなたはこれをしましたか? – Literphor

+0

'animated:true'がジャンプすると' animated:false'が動作しますか? – Literphor

+0

@Literphor - falseは望ましくないジャンプを引き起こしますが、trueではcollectionViewが先頭から始まり、次に正しい領域に自動スクロールします。私はちょうどアニメーションやジャンプなしで正しい場所に表示するためのビューが必要です。また、はい、cellTappedIndexPathは、didSelectItem経由で更新されるクラスレベルの変数として定義されています...しかし、どちらも正しく動作していません。 – Joe

答えて

0

collectionviewセルがタップされたときに受け取ったindexPathを保存し、必要に応じて使用することができます。

var selectedIndexPath: NSIndexPath? 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    selectedIndexPath = indexPath 
} 

func scrollToCell(){ 

     if let index = selectedIndexPath{ 
customViewCollectionView.scrollToItemAtIndexPath(index, atScrollPosition: .CenteredVertically, animated: false) 
    }else{ 
     print("A cell hasnt been selected yet") 
    } 
} 
+0

selectedIndexPathプロパティを追加し、その値を更新するためにdidSelectItemに追加し、関数を追加し、viewDidAppear(およびviewDidLoad/viewWillAppear)内でscrollToCell関数を呼び出しました。ログは「セルはまだ選択されていません」という印刷を続けます。 – Joe

関連する問題