我对 Mac 上的简单 NSScrollView 有一个奇怪的问题。我刚开始在 Cocoa 中编程,但我之前在 iOS 上使用过 UIKit。我在我的 xib 文件中添加了一个 NSScrollView,并将当我在窗口中放置滚动视图时由 Xcode 自动生成的 NSView 子类化。子类只是将内容视图添加到滚动视图并绘制背景。这里是:
#import "TweetsView.h"
@implementation TweetsView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)awakeFromNib {
[self reload];
}
- (void)reload {
//Retrieve tweets
ACAccount *account = [[TwitterModel retrieveTwitterAccounts] objectAtIndex:1];
TwitterModel *model = [[TwitterModel alloc] init];
NSArray *timeline = [model retrieveMainTimelineWithAccount:account];
//Display the tweets
int stackHeight = 0;
for (NSDictionary *tweetDictionary in timeline) {
TweetView *tweetView = [[TweetView alloc] initWithFrame:NSMakeRect(0, stackHeight, self.frame.size.width, 60)];
[tweetView setMainText:[tweetDictionary objectForKey:@"text"]];
[self addSubview:tweetView];
stackHeight += (int)tweetView.frame.size.height;
}
self.frame = NSMakeRect(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, stackHeight);
}
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor colorWithCalibratedRed:0.96 green:0.96 blue:0.96 alpha:1.0] setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
- (void)setTweets:(NSArray *)tweets {
_tweets = tweets;
}
- (NSArray *)tweets {
return _tweets;
}
@end
当我运行这个程序时,滚动视图将正常显示,但我不能用我的触控板滚动它。滚动条也不会出现。当我调整窗口大小时,滚动条会出现一秒钟,就像它们通常在 Cocoa 应用程序中一样,如果我很快,我可以通过拖动滚动条来滚动。所以我认为滚动视图确实存在,但它不响应我的鼠标和手势。
我在这里做错了什么?我正在运行 Mountain Lion 和 Xcode 4.4,滚动视图前面没有视图。提前致谢!