2017-01-03 4 views
0

新しいView Controllerに接続しました。このView Controllerには、対応するCollectionViewCellの配列データが格納されます。前のセル配列を表示するためにデータを変更するにはどうすればよいですか?最後のビューコントローラーに戻ってそこからセルを選択する必要はありませんか?私はSwift 3を使用しています。以下は、私が意味することを説明する画像です。ViewControllerでindexPathを見つけよう

最初の画像は最初のView Controllerにあります。 2番目と3番目の画像は、リストの最初の2つのいずれかがタップされたときに表示される画像です。 2番目のView Controllerの矢印キーを使用して次のインデックスに移動できます。どのようにしてこの機能を達成できますか?

let dataSource = DataSource() 

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
return 1 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    if inSearchMode { 
     return filteredAnimal.count 
    } 

    return dataSource.anim.filter{ $0.isDefault! }.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AnimIndex", for: indexPath as IndexPath) as! AnimIndex 


    let animal: Animal 

    if inSearchMode { 
     animal = filteredAnimal[indexPath.row] 
    } else { 
     animal = dataSource.anim.filter{ $0.isDefault! }[indexPath.row] 
    } 

    cell.configureCell(animal) 

    return cell 
} 
+0

私はあなたの質問から理解することができます - あなたは以前のviewcontrollerのデータを更新したいと思います。以下は、これを行うためのいくつかの方法です 1.現在のビューコントローラからデリゲートと呼び出しを作成します。 2.現在のviewcontrollerから以前のviewcontrollerに通知を送信します。 –

+0

私の理解によれば、すべてのコレクションビューのセルデータを次のビューコントローラに渡す必要があるので、今すぐすべてのデータがあるので、 次または前のインデックスデータを選択する必要があります。 –

+0

詳細を含むポストを更新しました – user4938361

答えて

1

これは非常に一般的なUIパターンです。マスター/詳細を検索する必要があります。このUIパターンの例を示すたくさんのサンプルプロジェクトを見つけることができます。

細胞に関しては考えません。モデルオブジェクトの観点から考えてみましょう。これはアプリデータのストアです。最初のビューコントローラに表示されるデータのリスト全体を表すモデルオブジェクトが必要です。

モデルオブジェクトは、そこから情報を表示する必要があるすべてのビューコントローラから到達可能でなければなりません。モデルオブジェクトへの参照を渡すことも、シングルトンにすることもできます。どちらの方法にも利点があります。

セクションビューとテーブルビューで構成されたコレクションビューとテーブルビューの場合、データオブジェクトの配列の配列は、しばしばモデルの構造に適しています。データが単一のセクションにある場合は、単一の配列を使用できます。

ユーザが最初のビューコントローラ内のセルをタップすると、2番目のビューコントローラを呼び出すことになります(セグレットまたは手動で呼び出すことによって)。2番目のビューコントローラを選択したオブジェクトのindexPathに渡しますあなたのモデルオブジェクトへの参照を渡すかもしれません(または、私が言ったように、モデルオブジェクトをグローバルにアクセス可能なシングルトンにすることができます)。

次に、ユーザーがアップ/ダウンボタンをタップすると、アプリケーションが表示しているすべてのデータを格納するモデルオブジェクトにアクセスできるため、任意のビューコントローラ内から次のオブジェクトに移動できます。データがセクション、行、行および列に編成されている場合は、データモデルに次または以前のアイテムメソッドを追加して、そのロジックを一度書き込むだけで済みます。

+0

わかりました。そして私は実際にモデルをすでに設定しています。問題は、新しいViewController内部からビューを変更する方法がわかりません。私ができることは、以前のものに戻り、新しいセルをタップすることだけです。私はviewcontrollerの矢印のようなものを実装したい – user4938361

+0

'displayDataForIndexPath'メソッドを持つように2つ目のView Controllerを記述します。このメソッドは、そのindexPathのデータモデルからすべてのデータを取り出し、View Controllerのフィールドにインストールします。View ControllerのviewWillAppearメソッドで 'displayDataForIndexPath'メソッドを呼び出します。次に、ユーザが次または前のボタンをタップすると、次のindexPath値を計算し、新しいindexPath値で 'displayDataForIndexPath'を呼び出します。 –

+0

問題は残念ですが最後の最後の部分**次に、ユーザーが次または前のボタンをタップすると、次のindexPath値を計算し、新しいindexPath値でdisplayDataForIndexPathを呼び出します。**これは、どのように達成するかを知っている。質問では、indexPathの値を見つける方法を尋ねます。 – user4938361

関連する問題