Я пытаюсь программно создать окно с настраиваемым contentView
и одним настраиваемым элементом управления NSTextField
, но у меня возникли проблемы с получением этой иерархии окна и представлений.drawRect не вызывается при добавлении subview
Я создаю пользовательское окно без полей и переопределяю его setContentView
/contentView
accessors. Кажется, что это работает нормально, и настраиваемые методы contentView's initWithFrame
и drawRect
вызываются, заставляя contentView правильно рисовать.
Но как только я пытаюсь программно добавлять пользовательские NSTextField
в contentView
, он не добавляется и не нарисован. Говоря обычай я имею в виду, что я переопределить это обозначается инициализатору (initWithFrame:frame
- только для установки пользовательских шрифтов) метод DrawRect и который выглядит следующим образом:
- (void)drawRect:(NSRect)rect {
NSRect bounds = [self bounds];
[super drawRect:bounds];
}
Обычай инициализатор contentView выглядит следующим образом:
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self != nil) {
// i want to draw itself to the same
// size as contentView thus i'm using same frame
CustomTextField *textField = [[CustomTextField alloc] initWithFrame:frame];
[self addSubview:textField];
[self setNeedsDisplay:YES];
}
return self;
}
Я боролся с этим в течение нескольких часов, поэтому любые указатели очень ценятся. Дополнительный код доступен по запросу.)
Ну, я даже не пытался переопределить метод drawRect или просто рисовать черный прямоугольник. Причина, по которой я игнорирую параметр 'rect', заключается в том, что он определяет только область, которую нужно перерисовать. Например, когда курсор на текстовом поле мигает - OS отправляет drawRect с сообщением с параметром rect, который определяет только область этого курсора. Спасибо за ваш совет, я постараюсь следовать ему. – Eimantas