我的一位同事今天来找我,问他如何加载或视图交换一个documentView
,NSScrollView
以便加载的视图看起来固定在左上角而不是下角。
尽管阅读了 Apple、StackOverflow 和其他各种地方的文档,但他花了一段时间在网上搜索并苦苦挣扎,并没有找到解决方案。
以下是逐个问题:
在 Interface BuilderNSScrollView
中将一个拖入项目中。同样在 Interface Builder 中,将两个自定义视图拖到项目中并添加一些文本字段、按钮等。
使用以下IBOutlet
s 创建一个控制器类(例如 myController):
IBOutlet NSScrollView * myScrollView
IBOutlet NSView * myCustomView1
IBOutlet NSView * myCustomView2
将插座连接到 Interface Builder 中的控件。
创建一个NSView
子类来翻转documentView
:
@implementation myFlippedView
-(id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
-(void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
}
-(BOOL)isFlipped {
return YES;
}
在 Interface Builder 中选择 的documentView
并NSScrollView
使其成为 的子类myFlippedView
。在 Interface Builder 中,您将选择 NSScrollView,然后再次单击它以访问 . documentView
,或更改 IB 库以显示树视图并选择NSScrollView
.
在myController
类中使用以下方法交换视图:
-(void)awakeFromNib {
[myScrollView setDocumentView:myCustomView1];
}
-(IBAction)swapViews:(id)sender {
if ([myScrollView documentView] == myCustomView1) {
[myScrollView setDocumentView:myCustomView2];
} else {
[myScrollView setDocumentView:myCustomView1];
}
}
最后将项目中的一个按钮连接到操作swapViews
、构建和运行。
问题是没有像 isFlipped 预期的那样解析坐标。