62

xib でビューを作成しました (アクティビティ インジケーター、進行状況ビュー、およびラベルを使用)。次に、.h/.m ファイルを作成しました。

#import <UIKit/UIKit.h>

@interface MyCustomView : UIView {
    IBOutlet UIActivityIndicatorView *actIndicator;
    IBOutlet UIProgressView *progressBar;
    IBOutlet UILabel *statusMsg;
}

@end

#import "MyCustomView.h"

@implementation MyCustomView    

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    }
    return self;
}

- (void)dealloc {
    [super dealloc];
}

@end

IB では、ファイルの所有者とビュー ID を MyCustomView に設定し、IBOutlet をファイルの所有者に接続します。

MyViewController.m では、次のことを行いました。

- (void)viewDidLoad {

    [super viewDidLoad];   

    UIView *subView = [[MyCustomView alloc] initWithFrame:myTableView.frame];
    [subView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];

    [myTableView addSubview:subView];
    [subView release];
}

アプリを実行すると、ビューが追加されますが、ラベル、進行状況バー、アクティビティ インジケーターが表示されません。

私は何を間違っていますか?

4

3 に答える 3

131

-loadNibNamedメソッドを使用してロードする必要があります。-initWithNibNameUIViewControllers 専用です。

次のコードを MyCustomView init メソッドに追加します。

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
[self addSubview:mainView];

nib からオブジェクトを初期化する場合、- (id)initWithCoder:(NSCoder *)aDecoderinitialize が呼び出されるため、nib 内で MyCustomView オブジェクトを作成する場合はそれをオーバーライドする必要があることに注意してください。でそれを行っているだけの場合はinitWithFrame:、それをオーバーライドして上記のコードを追加してください。また、あなたのペン先で、トップレベルの UIView が 1 つあることを確認し、その中に他のすべての要素を配置します (これにより、subviewArray のエントリが 1 つだけになるようになります)。

これにより、ペン先からビューが読み込まれ、オブジェクトに追加され、うまくいくはずです。

于 2011-03-18T20:46:26.583 に答える
1

この方法を使用する必要があると思います:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

これは、「nibNameOrNil」で .xib ファイル名を渡す必要があるためです。

于 2011-03-18T16:09:04.873 に答える
0

ホッカーが言ったように、XIB名(拡張子なし)を渡すそのメソッドを使用する必要があります。

次に、このリストを制御する必要があります。

  • IBで.xibファイルを開きます
  • [ファイルの所有者]をクリックして、正しいクラス(この場合はMyCustomView)を選択します
  • コントロールを押したまま、ファイル所有者からビューにドラッグします(これでビューのアウトレットはOKです)

それがうまくいくことを願っています。乾杯。

于 2011-03-18T20:26:26.873 に答える