ios - UITableViewCell 加载错误的 CAShapeLayer

标签 ios swift uitableview

根据日期加载背景渐变时,我有一个奇怪的行为。 我的代码应该根据现有日期更改 uitableviewcell 的背景渐变。如果某个日期已经过去,则背景渐变变为红色,当前日期变为黄色,将来日期变为绿色。 到目前为止,获得正确状态/梯度(红色/黄色/绿色)的代码可以工作并将显示在控制台中。不幸的是不在模拟器/iPad 中。 要使用

插入背景渐变 im
cell.layer.insertSublayer(gradient, atIndex: 0)    

奇怪的行为从这里开始。加载接下来的几个单元格时,背景渐变随机变为红色/黄色/绿色。 事实上,当我使用时,

cell.layer.addSublayer(gradient) 

渐变将根据日期正确显示,但标签 Outlet 将不再显示

UITableViewCell:

import UIKit

class TaskUITVCell: UITableViewCell {

    @IBOutlet weak var appointment: UILabel!
    @IBOutlet weak var title: UILabel!
    @IBOutlet weak var creator: UILabel!
    @IBOutlet weak var assignedTo: UILabel!
    @IBOutlet weak var btnBookingCustomer: UIButton!
    var type:String = "-"
    var value:Int = 0

    override func awakeFromNib() {
        super.awakeFromNib()
    }
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
    @IBAction func btnclicked(sender: AnyObject) {
        //TODO open User / Booking
        print("Type: \(self.type) Value: \(self.value)")
    }
}

TaskUITVC 类:UITableViewController

override func tableView(tableView: UITableView, cellForRowAtIndexPath     indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TaskUITVCell", forIndexPath: indexPath) as! TaskUITVCell

let due = overdueToActualDate(self.taskArray[indexPath.row])
let gradient = Gradients().cellNormal(cell.bounds, tint: due)
cell.layer.addSublayer(gradient)

self.dateFormat.dateStyle = NSDateFormatterStyle.MediumStyle
cell.title.text = self.taskArray[indexPath.row].title
//Apointment Date
cell.appointment.text =  self.dateFormat.stringFromDate(self.taskArray[indexPath.row].date)

//Button: to choose correct type to open specific view controller

if (String(taskArray[indexPath.row]) == "TaskModel"){
    cell.btnBookingCustomer.hidden = true
}
if (String(taskArray[indexPath.row]) == "CustomerTaskModel"){
    cell.btnBookingCustomer.setTitle("Customer: \((self.taskArray[indexPath.row] as! CustomerTaskModel).customer_number)", forState: .Normal)
    cell.type = String(taskArray[indexPath.row])
    cell.value = (self.taskArray[indexPath.row] as! CustomerTaskModel).customer_number
}
if (String(taskArray[indexPath.row]) == "BookingTaskModel"){
    cell.btnBookingCustomer.setTitle("Booking: \((self.taskArray[indexPath.row] as! BookingTaskModel).booking_id)", forState: .Normal)
    cell.type = String(taskArray[indexPath.row])
    cell.value = (self.taskArray[indexPath.row] as! BookingTaskModel).booking_id
}
return cell
}

希望有人对此问题提出建议

编辑:添加了两种方法的行为屏幕截图 insertSublayer 方法显示文本,但背景渐变错误。方法 addSublayer 按预期显示渐变,但没有文本 Pic: left side addSublayer, right side insertSublayer at the same indexPath.row

insertSublayer 方法中的渐变模式会以某种方式重复。 也许这是一些教练问题?

最佳答案

找到解决方案 https://stackoverflow.com/a/28460729/5786300 需要修改单元格的背景 View ,而不是为单元格添加新层

关于ios - UITableViewCell 加载错误的 CAShapeLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964712/

相关文章:

objective-c - 如何从一个 sip 帐户向多个 sip 帐户调用多个电话?

swift - 将 TableView 嵌套到分组 TableView 中

swift - 定义中的引用结构 - Swift

ios - 多层次深度泛型/协议(protocol)的 Swift 泛型和协议(protocol)问题

ios - 识别方法中的表格单元格

ios - UILabels 和自定义 UITableView 单元格

ios - 如何将手机图库中的图片添加到 UITableView

ios - 使用自定义布局的 UICollectionViewCell 高度

ios - 由于数据冗余,我需要重新组织 iOS 应用程序的解决方案

ios - 如何在模拟器环境中使用 UIImagePickerController 的 CameraOverlayView 属性