0

カスタム UIView を作成して xib ファイルにロードしようとしています。カスタム UIView は JtView と呼ばれ、コードは次のとおりです。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    NSLog(@"initWithFrame was called");  // this was called
    if (self) {
        // Initialization code
        [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:NULL];
        [self addSubview:self.view];
    }
    return self;
}

-(void)awakeFromNib
{
  [super awakeFromNib];
  [self addSubview:self.view];
}

xib ファイル (ファイル -> 新規 -> ファイル -> ユーザー インターフェイス -> ビュー) を作成する際に、メイン ウィンドウを削除し、Xcode のオブジェクト パレットからビューをドラッグしました。JtView のヘッダーに Alt キーを押しながらドラッグしようとしましたが、うまくいきませんでした。ここで関連付けを作成する必要がありますか?それとも、XCode が作成したものをそのままにしておくべきですか? (編集 - 詳細については、以下のコメントを参照してください)

UILabel も xib に追加しました。

ただし、シミュレーターで実行して背景色を赤に設定すると、ラベルが表示されません。カスタム UIView で参照として UILabel を作成する必要がありますか? これを削除するか、そのままにしておく必要がありますか?ここに画像の説明を入力

どうも

edit 1 接続とヘッダーファイルのスクリーンショットは次のとおりです。

4

2 に答える 2

1

クラスメソッドをUIViewに追加して解決します:


+ (id)customView;

+ (id)customView
{
    CustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] lastObject];

    // make sure customView is not nil or the wrong class!
    if ([customView isKindOfClass:[CustomView class]])
        return customView;
    else
        return nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    CustomView *customView = [CustomView customView];
    //And where you gonna use it add this line:
    //this self.view refers to any view (scrollView, cellView...)
    [self.view addSubview:customView];
}

それが役立つことを願っています

于 2013-10-08T15:02:18.703 に答える
-1

これを試して:

-(void)awakeFromNib {
    NSArray *obj = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:obj[0]];
}

または、「nibview」という名前の @property IBOutlet がある場合は、次のようにすることができます。

-(void)awakeFromNib {
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:self.nibview];
}
于 2013-02-28T22:43:41.860 に答える