我有一个有两个标签的应用。在第一个BookVC
标签中,我使用UICollectionViewController
来显示图书,并在didSelectItemAtIndexPath
中调用推送BookDetailVC
的函数。
在书签标签中,我想显示所有书签,当用户选择某本书时,我想推BookDetailVC
。我知道可以通过编写与BookVC
中相同的代码来实现。但我不想重复相同的代码。
我尝试制作BookmarkVC
BookVC
的子类,最后在BookVC
和BookmarkVC
显示同一本书,因为我使用的是同一本书来自BookVC
的UICollectionView实例。有没有办法覆盖UICollectionView
的{{1}}或任何其他方法来解决。对不起,我的英语不好。感谢。
答案 0 :(得分:0)
你采取了错误的做法。您描述书签和书籍的方式查看控制器,在我看来它们是相同的,唯一改变的是内容。
因此,由于集合视图使用数据源,您所要做的就是根据您是要显示所有书籍还是仅显示已添加书籍的书籍来更改数据源。
添加了代码:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier :"secondViewController") as! UIViewController
self.present(viewController, animated: true)
答案 1 :(得分:0)
我认为你做错了只需要根据点击的按钮重新加载集合视图取boolean 的 isBookMarkCliked:BOOL 强>
为了更好的可读性,请创建Book for Book 喜欢
class Book {
var title: String
var author: String
var isBookMarked:Bool
init(title: String, author: String, isBookMarked:Bool) {
self.title = title
self.author = author
self.isBookMarked = isBookMarked
}
}
并使用Book Model
全局声明两个数组arrForBooks:[Book] = []
arrForBookMarkedBooks:[Book] = []
使用扩展名
创建CollectionViewDelegate方法extension YourClassVC: UICollectionViewDataSource,UICollectionViewDelegate
{
//MARK: UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
if isBookMarkClicked
{
return arrForBookMarkedBooks.count
}
return arrForBooks.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellIdentifier", for: indexPath) as! YourCellClass
var currentBook:Book = nil
if isBookMarkClicked
currentBook = arrForStoreDetails[indexPath.row]
else
currentBook = arrForBookMarkedBooks[indexPath.row]
//Set data to cell from currentBook
return cell
}
//MARK: UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
collectionView.deselectItem(at: indexPath, animated: false)
//Your code to push BookDetailVC
}
}