50855


MacOS用のデスクトップアプリの開発をしております。  
NSStackViewに対して、プログラムで動的にTextFieldやボタンなどの項目を追加する方法を教えていただけませんでしょうか。

下記に検証で作成したViewのソースコードを記載します。

この中で背景色を変更する

[code]

        [[NSColor whiteColor] set];
        NSRectFill(dirtyRect);
    
[/code]

の部分は効いているものの、その下のNSTextField追加処理は画面に反映されません。

なお、作成したTestViewは下記のようにメインのViewにaddSubviewする形で開いています。

[code]

    [view_main addSubview:view_TestView];
    
[/code]

根本的に方法が間違っている可能性もあるかと思っておりますが、是非アドバイスいただけませんでしょうか。  
また、情報として不足しているものがございましたらお手数ですがご指摘いただけると助かります。

開発環境、言語  
XCode 10.1  
Objective-C  
Project Format:XCode 10.0-compatible

〜TestView.h〜

[code]

    #import <Cocoa/Cocoa.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface TestView : NSStackView<NSStackViewDelegate>
    
    @end
    
    NS_ASSUME_NONNULL_END
    
[/code]

〜TestView.m〜

[code]

    #import "TestView.h"
    
    @implementation TestView
    
    - (void)drawRect:(NSRect)dirtyRect {
        [super drawRect:dirtyRect];
    
        [[NSColor whiteColor] set];
        NSRectFill(dirtyRect);
    
        // Drawing code here.
    
        NSTextField *ctrl = [[NSTextField alloc]init];
        ctrl.stringValue = @"ここはテキストエリアです。";
        [self addSubview:ctrl];    
    }
    
    @end
    
[/code]


CC BY-SA 4.0
2018-12-03T06:30:14.887
50854
2018-12-03T06:38:24.080
31272
question
xcode objective-c macos
NSStackViewに対して動的に項目を追加する方法について（Objective-C/MacOSアプリ）


`- (void)addView:(NSView *)view inGravity:(NSStackViewGravity)gravity;`  
または  
`- (void)insertView:(NSView *)view atIndex:(NSUInteger)index
inGravity:(NSStackViewGravity)gravity;`

を使います。`NSStackViewGravity`は定数で

  * `NSStackViewGravityTop`
  * `NSStackViewGravityLeading`
  * `NSStackViewGravityCenter`
  * `NSStackViewGravityBottom`
  * `NSStackViewGravityTrailing`

のいずれかを指定します。


CC BY-SA 4.0
2018-12-03T06:38:24.080
50855
2018-12-03T06:38:24.080
14745
50854
answer