我需要在viewcontroller顶部自动滚动图像滑块,然后是一些实体列表(带图像和标题的动态单元格)。为了实现我已经采用了uitableview,我将scrollview添加到我的第一个单元格,我的代码如下
public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0{
return 200
}
else {
return 50
}
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if indexPath.row == 0 {
let sv = UIScrollView(frame: CGRect(x: 0, y: 0, width: cell.frame.width, height: cell.frame.height))
sv.auk.show(url: "url for image1")
sv.auk.show(url: "url for image2")
cell.addSubview(sv)
print("inside if")
}
else {
print("else")
cell.textLabel?.text = "cool"
}
return cell
}
我正在使用this存储库创建图像滑块,在滚动视图上创建滑块,因此对于第一个单元格,我添加了scrollview。但正如您在图片中看到的那样,图像滑块重新出现在多行上。请告诉我我正在做的错误。如果有更好的方法,请建议。
答案 0 :(得分:2)
尝试为动态单元格单独创建一个类。将 cellForRow 方法中的单元格(静态和动态单元格)排队,如下所示:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return indexPath.row == 0 ? 200 : 50
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
scrollViewWidth = cell.frame.width
scrollViewHeight = cell.frame.height
let scrollView = prepareScrollView(width: scrollViewWidth, height: scrollViewHeight)
cell.addSubview(scrollView )
print("First row")
return cell
}
else {
let myCustomCell: MyCustomTableViewCellClass = tableView.dequeueReusableCell(withIdentifier: "MyCustomTableViewCellIdentieier", for: indexPath) as! MyCustomTableViewCellClass
myCustomCell.textLabel?.text = "Cool"
print("Other dynamic rows")
return myCustomCell
}
}
func prepareScrollView(_ width: Float, height: Float) -> UIScrollView {
let scrollViewFrame = CGRect(x: 0, y: 0, width: width, height: height)
let scrollView = UIScrollView(frame: scrollViewFrame)
scrollView.auk.show(url: "url for image1")
scrollView.auk.show(url: "url for image2")
return scrollView
}
将一个单独的类作为 UITableViewCell 类型的 MyCustomTableViewCellClass ,并使用此类为您的动态单元格创建子类。不要忘记将单元格标识符设为“MyCustomTableViewCellIdentieier”
在此之后,您的静态单元格将只出列一次,并且没有机会重复UI元素
答案 1 :(得分:0)
您可以在表格视图单元格类中尝试此代码 -
override func prepareForReuse() {
//set your lable and image view to nil
}
SideMenuTVCell是我的自定义UITableViewCell类 -
希望您在此课程中拥有自己的课程,并添加prepareForReuse()
方法 -
class SideMenuTVCell: UITableViewCell {
@IBOutlet weak var iconIView: UIImageView!
@IBOutlet weak var lblTitle: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
override func setHighlighted(_ highlighted: Bool, animated: Bool) {
super.setHighlighted(highlighted, animated: animated)
}
override func prepareForReuse() {
//set your lable and image view to nil
self.iconIView.image = nil
self.lblTitle.text = nil
}
}