我想在子类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
我试着调整窗口的大小,事情变得更加可悲的是“搞笑”:
http://oi43.tinypic.com/25pshub.jpg
我不明白为什么问题是或如何解决。任何人都可以帮助我吗?我在这里上传我的示例代码:Download
很伤心,没有人回答这个问题。
我注意到当子视图被-addSubview:
和-setFrame
方法添加到这个视图时,它们也错误地进行了布置。
@ H2CO3我对为什么要移除标签“xcode”有点好奇吗? –
,因为这不是一个Xcode的问题。在使用它之前,应该阅读标签的描述(“标签维基”) - “xcode”的标签维基说:“它不应该用于一般的iOS和OS X编程问题”。 – 2013-06-21 12:27:34