2016-03-12 3 views
0

У меня странное поведение при загрузке фонового градиента в зависимости от даты. Мой код должен менять фоновый градиент uitableviewcell в зависимости от существующей даты. Если дата находится в прошлом, фоновый градиент становится красным, желтым для настоящего и зеленым для будущих дат. Пока что код для получения правильного состояния/градиента (красный/желтый/зеленый) работает и будет отображаться на консоли. К сожалению, не в симуляторе/iPad. Чтобы вставить фон градиент им с помощьюUITableViewCell загружает неправильный CAShapeLayer

cell.layer.insertSublayer(gradient, atIndex: 0)  

Здесь начинается странное поведение. При загрузке следующих нескольких ячеек градиент фона поворачивается случайным образом красным/желтым/зеленым. На самом деле, когда я использую,

cell.layer.addSublayer(gradient) 

градиенты будут корректно отображаться в зависимости от даты, но этикетки Outlets не будет отображаться больше

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 отображает текст, но фоновый градиент неверен. Methode addSublayer отображает градиент, как ожидалось, но текст Pic: left side addSublayer, right side insertSublayer at the same indexPath.row

Каким-то образом шаблон градиента в методах insertSublayer повторяется. Возможно, это какая-то коучинговая проблема?

ответ

Смежные вопросы