2017-01-03 93 views
0

我找到了一个新的View Controller。该视图控制器包含来自相应的CollectionViewCell的数组数据。如何更改数据以显示前一个单元格数组?不必回到最后一个视图控制器并从那里选择单元格?我正在使用Swift 3以下是解释我的意思的图像在ViewController中查找indexPath

第一个图像位于第一个视图控制器中。第二张和第三张图片是在列表中的前两张中的任何一张被点击时显示的内容。您可以使用第二个视图控制器中的箭头键转到下一个索引。我如何实现这一功能?

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.将当前视图控制器的通知发布到前一个视图控制器。 –

+0

根据我的理解,我认为您需要将所有collectionview单元格数据传递到下一个视图控制器,以便您现在具有所有数据,因此您需要选择 下一个或上一个索引数据。 –

+0

更新了帖子,提供更多信息 – user4938361

回答

1

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

不要用细胞来思考。根据模型对象来考虑 - 为您的应用程序数据提供商店。您需要一个模型对象来表示您在第一个视图控制器中呈现的所有数据列表。

该模型对象应该可以从所有需要显示信息的视图控制器访问。您可以传递对模型对象的引用,也可以将其设置为单例。这两种方法都有其优点。

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

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

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

+0

好吧,我理解你的意思。我确实已经建立了模型。问题是我只是不知道如何从新的ViewController中改变视图。我能做到这一点的唯一方法是回到上一个,然后点击新的单元格。我想实现像viewcontroller的箭头一样的东西 – user4938361

+0

写你的第二个视图控制器有一个'displayDataForIndexPath'方法。让该方法从该数据模型中为该indexPath获取所有数据,并将其安装到视图控制器的字段中。让你的视图控制器的viewWillAppear方法调用'displayDataForIndexPath'方法。然后,当用户点击下一个或上一个按钮时,计算下一个indexPath值,并用新的indexPath值调用“displayDataForIndexPath”。 –

+0

对不起,但它正好是最后一部分**然后,当用户点击下一个或上一个按钮时,计算下一个indexPath值并用新的indexPath值调用displayDataForIndexPath。**就在这里,我不'不知道如何实现。在问题中,我问如何找到indexPath值。 – user4938361