0

I have an empty NSScrollView created with Interface Builder.

And in my code I add, upon a user click, a NSSegmentedControl. For all the next clicks, I add a segment to it.

My problem is that, once I reach the visual limit of NSScrollView, it doesn't start to scroll and all the post-limit segments are never shown.

This is the NSScrollView from Interface Builder :

enter image description here

And here is the method :

- (IBAction)addSegment:(id)sender
{
    if (segCtrlColumns == nil) {
        segCtrlColumns = [[NSSegmentedControl alloc] initWithFrame:[self.viewColumns frame]]; //self.viewColumns is the NSScrollView from IBOutlet
        [segCtrlColumns setSegmentCount:1];
        [segCtrlColumns setLabel:@"Test" forSegment:0];
        [segCtrlColumns setTarget:self];
    } else {
        double increaseSegments = [segCtrlColumns segmentCount]+1;
        [segCtrlColumns setSegmentCount:increaseSegments];
        [segCtrlColumns setLabel:@"Test" forSegment:increaseSegments-1];
    }
    [self.viewColumns setDocumentView:segCtrlColumns];
}

And here is the problem :

enter image description here

(Well it is more likely "nothing to scroll" than "not scrollable")

4

1 に答える 1

0

さて、私はいくつかのテストを行いましたが、問題は nsscrollview ではなく nssegmentedcontrol にあります。フレームサイズはまったく更新されません。initWithFrameしたがって、スクロールビューのサイズである - で設定した幅で動かなくなります。(これが NSScrollView がスクロールを開始しなかった理由です)

セグメントが追加されたときに NSSegmentedControl の実際のサイズ (更新されたサイズ) を取得する簡単な方法が見つからなかったので、次のトリックを実行しました。

  • すべてのセグメントを同じサイズ (幅 100 ポイント) にしました
  • セグメントを追加すると、NSSegmentedControl のフレームがさらに 100 ポイント更新されます

コードは次のとおりです。

-(IBAction)addColumn:(id)sender
{
    if (segCtrlColumns == nil) {
        //Init with a single segment with 100 points (pixels) width
        segCtrlColumns = [[NSSegmentedControl alloc] initWithFrame:NSMakeRect(0, 0, 100.0, 30.0)];
        [segCtrlColumns setSegmentCount:1];
        [segCtrlColumns setWidth:96.0 forSegment:0]; //The segment has some borders to concider in its size
        [segCtrlColumns setLabel:@"Testing" forSegment:0];
        [segCtrlColumns setTarget:self];
        //Tell the scrollview, the documentView is my segmented control
        [self.viewColumns setDocumentView:segCtrlColumns];
    } else {
        //Add a segment and update the frame size
        double increaseSegments = [segCtrlColumns segmentCount]+1;
        [segCtrlColumns setFrame:NSMakeRect(0, 0, segCtrlColumns.frame.size.width+100.0, 30.0)];
        [segCtrlColumns setSegmentCount:increaseSegments];
        [segCtrlColumns setWidth:96.0 forSegment:increaseSegments-1];
        [segCtrlColumns setLabel:@"Testing" forSegment:increaseSegments-1];
    }
}

ここでの唯一の問題は、すべてのセグメントが同じサイズであり、動的ではないことです...

于 2014-08-13T14:26:22.320 に答える