Я хотел создать кольцо фокусировки вне подкласса NSView для определения выбора. Моя ссылка взята здесь: Link.Подвижность подкласса NSView неправильно установлена после рисования фокусного кольца
Я последовал за ссылку, переписал -drawRect
метод как:
@property (nonatomic) BOOL shouldDisplayFocus;
...
- (void)drawRect:(NSRect)dirtyRect
{
// Drawing code here.
if (_shouldDisplayFocus)
{
[self setKeyboardFocusRingNeedsDisplayInRect:[self bounds]];
}
[super drawRect:dirtyRect];
[[NSColor blackColor] set];
NSRectFill(dirtyRect);
if (_shouldDisplayFocus)
{
NSSetFocusRingStyle(NSFocusRingTypeExterior);
NSBezierPath *path = [NSBezierPath bezierPathWithRect:NSInsetRect([self bounds], -1.0, -1.0)];
[[NSColor blackColor] set];
[path stroke];
[NSGraphicsContext restoreGraphicsState];
}
}
И его -mouseDown:
метод также переписаны:
- (void)mouseDown:(NSEvent *)theEvent
{
[super mouseDown:theEvent];
if (_delegate && [_delegate respondsToSelector:@selector(mouseDownAtView:withEvent:)])
{
[_delegate mouseDownAtView:self withEvent:theEvent];
}
}
И после того, как вид нажата, его представитель будет установлен/не- установите кольцо фокусировки, и оно снова вызовет его -drawRect:
.
Он работал и сгенерировал кольцо фокусировки вне поля зрения правильно. Однако, одна проблема возникла вскоре:
http://oi39.tinypic.com/2s846jo.jpg
У меня был вид изображения внутри подклассы зрения. Поскольку прямоугольник изображения был автомастером с объектами NSLayoutConstraint, я создаю четыре выхода NSLayoutConstraint для настройки их значений. Я не часто меняю ограничения макета. Собственно, поскольку размер изображения остался неизменным, я бы не стал их устанавливать.
Вот ситуация, когда подклассы вид не нажата (вроде хорошо):
http://oi42.tinypic.com/2urqcmf.jpg
Затем нажмите на изображение (кольца фокусировки сгенерированного, но ...):
http://oi40.tinypic.com/33ldtfa.jpg
И я пытался изменить размер окна, все стало еще более печально "FUNNY":
http://oi43.tinypic.com/25pshub.jpg
Я не мог понять, почему проблема или как ее решить. Может ли кто-нибудь помочь мне в этом? Я загрузил свой образец кода здесь: Download
Довольно грустно, что никто не ответит на этот вопрос.
Я заметил, что subviews также неправильно отображались, когда они добавляли к этому виду -addSubview:
и -setFrame
.
@ H2CO3 Мне было немного любопытно, почему удалить тег «xcode»? –
, потому что это не вопрос Xcode. Стоит прочитать описание (тег wiki) тега перед его использованием - тег wiki для 'xcode' говорит, что« он не должен использоваться для общих вопросов программирования iOS и OS X ». –