Bạn không nói phân cấp chế độ xem hoặc chế độ xem bạn đang sử dụng cho các ô của mình. Bạn cũng không nói như thế nào hoặc nơi bạn đang thiết lập màu của trường văn bản hoặc màu nào, cụ thể.
Khi một hàng được chọn, hàng sẽ tự động tính interiorBackgroundStyle
của nó. Nó cũng đặt backgroundStyle
của chế độ xem ô nếu nó phản hồi -setBackgroundStyle:
hoặc là một NSControl
với ô phản hồi điều đó.
Nếu chế độ xem ô của bạn là phiên bản NSTableCellView
, nó sẽ chuyển tiếp kiểu nền cho tất cả các bản xem phụ đáp ứng cùng tiêu chí. Nếu bạn sử dụng chế độ xem vùng chứa khác làm chế độ xem ô của mình và bạn muốn kiểu nền được chuyển tiếp như thế này, bạn sẽ phải thực hiện chính nó trong lớp chế độ xem của mình.
Một ô của NSTextField
(an NSTextFieldCell
) phản hồi -setBackgroundStyle:
và do đó có kiểu nền được đặt tự động theo các cơ chế ở trên. Ô trường văn bản sẽ tự động thay đổi màu văn bản thành màu trắng nếu màu textColor
là một trong các màu điều khiển tiêu chuẩn (ví dụ: NSColor.controlTextColor()
), nhưng sẽ không làm như vậy nếu bạn gán màu không chuẩn. Vì vậy, nếu bạn đang thiết lập một màu cụ thể cho văn bản của mình, bạn có trách nhiệm thay đổi điều đó khi kiểu nền thay đổi.
Bạn có thể sử dụng phân lớp NSTableCellView
và thêm người quan sát thuộc tính (didSet
) cho thuộc tính backgroundStyle
. Điều đó có thể thay đổi trường văn bản textColor
tùy thuộc vào kiểu đã được đặt. Ví dụ: bạn có thể sử dụng màu tùy chỉnh của mình nếu kiểu nền không phải là .Dark
hoặc sử dụng màu trường văn bản bình thường NSColor.controlTextColor()
nếu đó là .Dark
(để trường văn bản sẽ hiển thị màu trắng).
Bạn cũng có thể sử dụng lớp con của NSTextFieldCell
cho trường văn bản của mình và thực hiện cùng một loại điều. Hoặc ghi đè drawInteriorWithFrame(_:inView:)
để vẽ bằng màu văn bản khác tùy thuộc vào kiểu nền.
Nguồn
2015-04-25 01:53:27
Trong bảngXem: viewForTableColumn: row: delegate method Tôi đang thực hiện việc này để đặt màu của trường văn bản trong ô dựa trên khung nhìn của tôi: cell.textField! .textColor = NSColor.redColor(). Các ô được đặt thành blackColor() đảo ngược tốt, nhưng redColor() thì không. Câu trả lời của bạn sẽ mất một thời gian để tìm ra, vì vậy cảm ơn vì đã cho tôi một số ý tưởng để xem xét. –
Anh bạn, tôi sẽ kiểm tra, nhưng nếu điều này làm bạn là vị cứu tinh của tôi !! AppKit quá kỳ lạ khi đến từ UIKit :) – Frizlab
Nó hoạt động! \ o/Tuyệt vời. – Frizlab