首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSScrollView不滚动

NSScrollView不滚动
EN

Stack Overflow用户
提问于 2012-07-04 04:19:35
回答 1查看 2.5K关注 0票数 1

我正在将使用此tutorial的iPhone应用程序移植到Mac应用程序中。我已经能够让文本在NSScrollView中显示,但我不能让文本滚动,我希望有人知道我错过了什么。

在iPhone应用程序中,CTView是UIScrollView的子类

CTView.h:

代码语言:javascript
运行
复制
@interface CTView : UIScrollView <UIScrollViewDelegate> {

1) AppKit中没有NSScrollViewDelegate。缺少NSScrollView的委托接口是问题所在吗?

因此,对于Mac应用程序,CTView.h如下所示:

代码语言:javascript
运行
复制
@interface CTView : NSScrollView 

在CTView.m中我有

代码语言:javascript
运行
复制
[self setHasHorizontalScroller:YES];
[self setAcceptsTouchEvents:YES];

另外,在CTView.m中,我创建了一个帧的NSMutableArray,如下所示

代码语言:javascript
运行
复制
self.frames = [NSMutableArray array];

并用帧填充数组。我还设置了文档视图的框架,以便能够滚动浏览完整的较大图像,如下所示:

代码语言:javascript
运行
复制
[[self contentView] setFrame:[self bounds]];
[self.documentView setFrame:  NSMakeRect(0, 0, totalPages * self.bounds.size.width, textFrame.size.height)];

第一个框架在CTView中可见,但当我移动水平滚动条时,第二个框架在CTView中不显示。

我使用的是Xcode4.3.3和MacOSX10.7.4。

有没有人知道我需要做些什么才能让NSScrollView滚动浏览这些框架?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-07 08:55:49

终于想明白了。呼!

1) NSScrollView需要为其documentView提供一个视图,其中documentView是所滚动的内容。因此,在nib中,我创建了一个包含documentView视图的NSScrollView,并将documentView设置为该视图,如CTView.m中的代码所示

代码语言:javascript
运行
复制
NSArray *viewArray     = [self subviews];
NSArray *docViewArray  = [[viewArray objectAtIndex:0] subviews]; 
NSView  *docView       = [docViewArray objectAtIndex:0];

[self setDocumentView:docView];

2)然后,我将通常添加到UIScrollView中的帧数组添加到NSScrollView的documentView中。框架数组由多个内容元素组成。

代码语言:javascript
运行
复制
 while (textPos < [attString length]) { 
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), innerPath, NULL);
    CFRange frameRange = CTFrameGetVisibleStringRange(frame); 

   CTColumnView* content = [[[CTColumnView alloc] initWithFrame: NSMakeRect(0, 0, self.contentSize.width, self.contentSize.height)] autorelease];
    [docView addSubview: content];  // <<-- Here is where the frames are added to the documentView
    textPos += frameRange.length;
  }

这就起到了作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11318562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档