Подтвердить что ты не робот

Цвет содержимого содержимого таблицы

В моем приложении есть табличное представление с изображением и текстовым полем:

  • image = изображение в качестве изображения шаблона (светло-серый)
  • textfield = текст цвет черный

Если я выберу строку, цвет обоих будет отлично изменен на белый

Вопрос. Я меняю изображение на синий цвет image = render по умолчанию. Если теперь выбрать строку, цвет текста моего текстового поля изменится на белый, но изображение останется синим.

Я хочу, чтобы изображение меняло цвет на белый, но это не так.

Что я сделал не так?

Пример с изображением в качестве шаблона mode = > по умолчанию: серый | выбрано автоматически белый

введите описание изображения здесь

Пример с изображением цветного изображения в качестве режима по умолчанию = > по умолчанию: зеленый | выбран также зеленый | ожидаемый белый, но он останется зеленым

введите описание изображения здесь

4b9b3361

Ответ 1

Попробуйте следующее:

    import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var tableView:NSTableView!
    var selectIndex = -1
    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.delegate = self
        self.tableView.dataSource = self

    }

    func tintedImage(_ image: NSImage, tint: NSColor) -> NSImage {
        guard let tinted = image.copy() as? NSImage else { return image }
        tinted.lockFocus()
        tint.set()

        let imageRect = NSRect(origin: NSZeroPoint, size: image.size)
        NSRectFillUsingOperation(imageRect, .sourceAtop)

        tinted.unlockFocus()
        return tinted
    }
}

extension ViewController:NSTableViewDataSource, NSTableViewDelegate{
    func numberOfRows(in tableView: NSTableView) -> Int {
        return 3
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{


        let result = tableView.make(withIdentifier: "imageIcon", owner: self) as! NSTableCellView
        if selectIndex == row{
            result.imageView?.image = self.tintedImage(NSImage(named:"file")!, tint: NSColor.green)

        }else{
            result.imageView?.image = self.tintedImage(NSImage(named:"file")!, tint: NSColor.gray)

        }
        return result

    }

    func tableView(_ tableView: NSTableView, didAdd rowView: NSTableRowView, forRow row: Int) {
        if selectIndex == row{
            rowView.backgroundColor = NSColor.blue
        }else{
            rowView.backgroundColor = NSColor.clear
        }
    }


    func tableViewSelectionDidChange(_ notification: Notification) {
        let table = notification.object as! NSTableView
        self.selectIndex = tableView.selectedRow

        print(table.selectedRow);
        table.reloadData()
    }
}

Примечание. Изменение цвета изображения tintColor в соответствии с вашим требованием.

выбор строки таблицы с цветом
Надеюсь, это поможет вам.

Ответ 2

Создайте пользовательскую ячейку и переопределите setHighlighted(_ highlighted: Bool, animated: Bool), чтобы изменить tintColor iamgeView:

override func setHighlighted(_ highlighted: Bool, animated: Bool) {
    super.setHighlighted(highlighted, animated: animated)
    imageView?.tintColor = highlighted ? UIColor.white : UIColor.green
}

Затем, когда вы создаете свою ячейку, вы устанавливаете изображение с помощью UIImageRenderingMode.alwaysTemplate:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = CustomCell()
    cell.imageView?.image = UIImage(named: "custom_image")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    cell.imageView?.tintColor = UIColor.green
    return cell
}