Cocoa:在应用程序启动时隐藏textview的自定义滚动条

时间:2011-05-14 19:01:40

标签: cocoa scrollbar textview scroller

我为我的textview创建了一个自定义滚动条(在scrollview的awakeFromNib方法中启动它),现在我想让用户选择是否要在应用程序启动时显示滚动条。问题是即使我在创建它后立即隐藏它并将其设置为scrollview的滚动条,滚动器也总是会出现。奇怪的是,在触发事件后尝试隐藏滚动条(例如,通过单击首选项中的复选框),滚动条会正确隐藏和显示。我做错了什么?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

奇怪的是,在将自定义滚动条添加到滚动视图之前,我必须使用setHasVerticalScroller:YES,否则我无法使用双指滚动手势滚动。然后,如果用户不希望显示滚动条,我必须在文档的windowControllerDidLoadNib方法中使用setHasVerticalScroller:NO,在滚动视图中添加滚动条之后使用它awakeFromNib方法将无效。好吧,至少现在它似乎工作了!

答案 1 :(得分:0)

我总是使用IB设置滚动条,然后使用以下行,如果我想压制其中一个:

[self.aScrollView setHasHorizontalScroller:NO]; // so only the vertical scrollbar is active

尝试在awakeFromNib中使用该行,稍后在用户选择时将其设置为YES,而不是使用“hidden”属性。

P.S。 IB中添加的NSTextView始终嵌入在NSScrollView中,它是管理滚动条的scrollview。因此,如果上述方法不起作用,请尝试在textview的superview上调用setHasWhateverScroller:

[[[aTextView superview] superview] setHasHorizontalScroller:NO];

如果出现“无法识别的选择器”错误,请尝试将superview显式转换为NSScrollView(仅当superview确实是NSScrollView的实例时才会起作用):

[(NSScrollView *)[[aTextView superview] superview] setHasHorizontalScroller:NO];