0

IBInspectable プロパティを使用して小さな問題が発生していますが、それが私の xib と xib の使用に関係があるかどうかはわかりません。複数のビュー コントローラー間でカスタム コントロールを再利用しようとしています。コントロールはカスタム タブ マネージャーです。

タブマネージャーXib

ここに画像の説明を入力

IBInspectable 属性は、この xib で First、Second、Third として構成されます。

ヘッダー ファイルの対応するコードを次に示します。

 IB_DESIGNABLE
 @interface TabContainerView : NSView
 @property (nonatomic, strong) IBOutlet NSView *view;

@property (weak) IBOutlet TabContentView *contentView;
@property (weak) IBOutlet TabView *firstTab;
@property (weak) IBOutlet TabView *secondTab;
@property (weak) IBOutlet TabView *thirdTab;

@property (nonatomic, strong) IBInspectable NSString *tabOneText;
@property (nonatomic, strong) IBInspectable NSString *tabTwoText;
@property (nonatomic, strong) IBInspectable NSString *tabThreeText;

@end

#import "TabContainerView.h"

@interface TabContainerView ()
@property (nonatomic, strong) NSMutableArray *tabsArray;
@property (nonatomic, assign) NSInteger selectedTabIndex;

@property (weak) IBOutlet NSTextField *tabOneTextField;
@property (weak) IBOutlet NSTextField *tabTwoTextField;
@property (weak) IBOutlet NSTextField *tabThreeTextField;


@end

@implementation TabContainerView

#pragma mark Init

- (id)initWithFrame:(NSRect)frameRect {
    NSString* nibName = NSStringFromClass([self class]);
    self = [super initWithFrame:frameRect];
    if (self) {
        if ([[NSBundle mainBundle] loadNibNamed:nibName
                                          owner:self
                                topLevelObjects:nil]) {
            [self configureView];
        }
    }
    return self;
}

#pragma mark Configure View

- (void)configureView{
    [self.view setFrame:[self bounds]];
    [self addSubview:self.view];


    self.tabOneTextField.stringValue = self.tabOneText;
    self.tabTwoTextField.stringValue = self.tabTwoText;
    self.tabThreeTextField.stringValue = self.tabThreeText;

}

@end

これは、TabContainerView.xib で問題なく正常に機能します。このコントロールを 2 つの異なるビュー コントローラーで使用しようとすると、問題が発生します。私の両方のView ControllerもXibsからロードされています。

ビューコントローラー1には、次のようなものがあります。

ここに画像の説明を入力

ビュー コントローラー 1 では、カスタム ビューを TabContainerView サブクラスにサブクラス化しました。これは、アプリケーションを実行すると問題なく動作します。また、このビュー コントローラーに固有のテキストに変更しました。List、Map、Filter は、View Controller 1 の IBInspectable プロパティ値です。ビュー コントローラー 2 (表示されていません) でもまったく同じことを行いましたが、ビュー コントローラー 2 に固有の IBInspectable プロパティ値が異なります。ただし、アプリケーションを実行すると、値は更新されず、常に First、Second、および Third のままです. 私がやっていることがこの問題を引き起こしているかどうかはわかりませんが、助けやヒントをいただければ幸いです。(IBDesignable は、破損した場所で多くの警告を表示し、xib の最後に保存された値をロードしているだけなのかどうかわからないようです。)

4

1 に答える 1