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];
}
アプリを実行すると、ビューが追加されますが、ラベル、進行状況バー、アクティビティインジケーターが表示されません。
何が間違っていますか?
_-loadNibNamed
_メソッドを使用してロードする必要があります。 _-initWithNibName
_はUIViewControllers専用です。
次のコードをMyCustomView initメソッドに追加します。
_NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
[self addSubview:mainView];
_
Nibからオブジェクトを初期化する場合、- (id)initWithCoder:(NSCoder *)aDecoder
を呼び出して初期化するため、nib内でMyCustomViewオブジェクトを作成する場合はオーバーライドする必要があります。 _initWithFrame:
_で実行している場合は、それをオーバーライドして上記のコードを追加してください。また、ペン先で、トップレベルのUIViewが1つあることを確認し、その中に他のすべての要素を配置します(subviewArrayに1つのエントリのみが含まれるようにします)。
これにより、nibからビューがロードされ、オブジェクトに追加され、トリックが実行されます。
この方法を使用する必要があると思います:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
これは、「nibNameOrNil」で.xibファイル名を渡す必要があるためです。
Hockerが言ったように、XIB名(拡張子なし)を渡すメソッドを使用する必要があります。
次に、このリストを制御する必要があります。
それがうまくいくことを願っています。乾杯。