#swift #subclass #nsview #nstextfield #nsbutton
Вопрос:
У меня есть основной NSView с 2 подвидами NSView, каждый из которых содержит пользовательский NSButton (все они созданы в построителе интерфейсов). Мой пользовательский класс кнопок программно создает поле NSTextField под кнопками, добавляя его из супервизора:
И пользовательский код класса NSButton:
class buttonUpDown: NSButton {
var myLabel:NSTextField!
required public init?(coder: NSCoder) {
super.init(coder: coder)
let labelWidth=CGFloat(90)
print("init")
superview?.autoresizesSubviews = false
myLabel = NSTextField(frame: NSMakeRect(frame.origin.x frame.size.width/2-labelWidth/2,frame.origin.y-20,labelWidth,16))
myLabel?.stringValue = "Mesh Quality"
myLabel.alignment = .center
myLabel.font? = .systemFont(ofSize: 8)
myLabel.backgroundColor = .red
myLabel.isBordered = false
myLabel.isEditable = false
superview!.addSubview(myLabel)
}
}
Когда у меня есть одна кнопка, ссылающаяся на класс, метка отображается правильно.
Но когда у меня есть 2, только 1 метка появляется случайным образом слева или справа:
Чего мне не хватает, чтобы под каждой кнопкой отображался текст ?
Комментарии:
1. Вы пробовали «Захватить иерархию представлений», чтобы проверить представление?
2. Спасибо, не знал об этой функциональности ! Кажется, я нашел проблему. Создание метки в функции инициализации приведет к неправильному позиционированию рамки вида. Добавление их из функции рисования делает его более последовательным.
Ответ №1:
Нашел проблему. Создание метки в функции инициализации приведет к неправильному позиционированию рамки вида. Добавление их из функции рисования делает ее более надежной.
Комментарии:
1. Пожалуйста, не делайте этого в drawRect. Вместо этого используйте viewDidAppear