我正在构建一个tvos
应用。目前我遇到了一个UITableView
的问题。我的UITableView
有两个部分,每个部分只有一行。在这两行中,我有一个水平滚动的UICollectionView
。在每个UICollectionViewCell
中都有一个用于显示某些图像的imageView。这是我正在设置的图像。
我为UITableViewCells
设置了单独的重用标识符。但是我对UICollectionViewCells
具有相同的重用标识符。
现在我从网上获取数据。在开始时没有数据,因此UITableView
和UICollectionViews
为空。一旦数据可用,我就会调用tableView.reloadData()
,但调用此函数不会将新信息带到集合视图中。有人可以指导我如何使这个工作。
这是我自定义UITableviewCell类的代码。
import UIKit
class UIScrollingTableViewCell : UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var myCollectionView: UICollectionView!
//MARK: CollectionViewDelegate & DataSource
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
print("numberOfSectionsInCollectionView ")
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if self.reuseIdentifier == recentlyWatchCellId {
return DataManager.sharedInstance.recentlyWatched.count
} else{
return DataManager.sharedInstance.recentlyAdded.count;
}
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("smallCollectionViewCell", forIndexPath: indexPath) as! MyCollectionViewCell
var lesson = DataManager.sharedInstance.recentlyWatched[indexPath.row]
if self.reuseIdentifier == recentlyAddedCellId {
lesson = DataManager.sharedInstance.recentlyAdded[indexPath.row]
}
if let url = lesson.instructorImageUrl {
cell.imageView.sd_setImageWithURL(NSURL(string: url), placeholderImage: UIImage(named: "categoryLessons"))
}
return cell
}
//MARK: Focus
override func canBecomeFocused() -> Bool {
return false
}
}
这是我的UIViewController
的一些代码,它有我的tableView的数据源方法。 tableview
是@IBOutlet
//MARK: UITAbleViewDelegate & UITableViewDatasource
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch section {
case RecentLessonSection.Recorded.rawValue:
return NSLocalizedString("Recently Added", comment: "Recently Added")
case RecentLessonSection.Watched.rawValue:
return NSLocalizedString("Recently Viewed", comment: "Recently Viewed")
default:
return ""
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2;
//return RecentLessonSection.Max.rawValue
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UIScrollingTableViewCell
switch indexPath.section {
case RecentLessonSection.Recorded.rawValue:
cell = tableView.dequeueReusableCellWithIdentifier(recentlyAddedCellId, forIndexPath: indexPath) as! UIScrollingTableViewCell
case RecentLessonSection.Watched.rawValue:
cell = tableView.dequeueReusableCellWithIdentifier(recentlyWatchCellId, forIndexPath: indexPath) as! UIScrollingTableViewCell
default:
cell = tableView.dequeueReusableCellWithIdentifier(recentlyWatchCellId, forIndexPath: indexPath) as! UIScrollingTableViewCell
}
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1;
}
//MARK : Notification Handlers
func receivedNewData() {
self.tableView.reloadData()
}
答案 0 :(得分:3)
在您提供的代码中,我可以看到您仅为根表视图调用了reloadData()
。但是,如果要更新集合视图,还应该为包含集合视图的每一行调用reloadData()
。例如,您可以在方法func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
中执行此操作。将行cell.myCollectionView.reloadData()
添加到此方法的末尾,我希望它对您有用。