在ViewController中找到indexPath

时间:2017-01-03 13:01:06

标签: ios arrays swift indexing uiviewcontroller

我伪装成一个新的视图控制器。此视图控制器包含来自相应CollectionViewCell的数组数据。如何更改数据以显示先前的单元格数组?无需返回到最后一个视图控制器并从那里选择单元格?我正在使用Swift 3下面的图片解释了我的意思

第一张图片位于第一个View Controller中。第二个和第三个图像是在点击列表中前两个图像中的任何一个时显示的图像。您可以使用第二个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
}

1 个答案:

答案 0 :(得分:1)

这是一种非常常见的UI模式。你应该搜索主/细节。您应该能够找到许多示例项目来提供此UI模式的示例。

不要考虑细胞。考虑模型对象 - 应用数据的商店。您需要一个模型对象来表示您在第一个视图控制器中显示的整个数据列表。

应该可以从需要显示信息的所有视图控制器访问该模型对象。您可以传递对模型对象的引用或使其成为单例。两种方法都有优势。

对于按部分和行组织的集合视图和表视图,数据对象数组的数组通常是模型的良好结构。如果您的数据在一个部分中,那么您可以使用单个数组。

当用户点击第一个视图控制器中的单元格时,您将调用第二个视图控制器(来自segue或通过手动调用它。)您将第二个视图控制器传递给所选的indexPath对象,也可能传递对模型对象的引用(或者,就像我说的,你可以使模型对象成为一个全局可访问的单例,在这种情况下你不需要传递它。)

然后,在第二个(或第三个)视图控制器中,如果用户点击向上/向下按钮,您可以访问存储应用程序所呈现的所有数据的模型对象,这样您就可以导航到下一个对象从任何视图控制器中。如果您的数据按部分和行或行和列进行组织,则可能需要将下一个/上一个项目方法添加到数据模型中,因此您只需编写一次该逻辑。