4

私はこれについて数時間苦労しています: NIB ファイルからロードされるカスタム UIView を作成したいです。これは私がしたことです:

1)「MyView」という名前のクラスと NIB ファイルを作成しました。

2)クラスをファイルの所有者カスタムクラスとして配置します。

3) NIB ファイルをロードするには、このコードが必要であることはわかっていますが、どこに配置すればよいかわかりません。「init」メソッドに入れました。

    NSArray * nib = [[NSBundle mainBundle]
                     loadNibNamed: @"MyView"
                     owner: self
                     options: nil];

    self = [nib objectAtIndex:0];

4) このカスタム ビューを使用する場合: IB を使用して、メインの ViewController に UIView を作成しました。カスタムクラスのビュープロパティに「MyView」を入れました。このビュー用に「myView」という IBOutlet を作成し、それを ViewController クラスに接続しました。

5) "init" を呼び出す必要があるのか​​、それとも NIB ファイルにあるために自動的に行われるのかがわかりません。私はそれらの両方を試しました。とにかく、「myView」クラス タイプは、MyView ではなく UIView として認識され、空のビューを表示しています。

私は何を間違っていますか?それを行う別の方法はありますか?

ありがとう、ニムロッド


編集:ここの回答に従ってコードを変更しました。ここでのすべての回答は、実際にはカスタム クラスを使用していませんでした。これが、ここでの全体的なアイデアです。これが私がやったことですが、testViewはTestViewではなくUIViewであると考えているため、アプリがクラッシュします。助けてください。

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,retain) TestView *testView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray* views=[[NSBundle mainBundle] loadNibNamed:@"TestView" owner:nil options:nil];
    self.testView= [views objectAtIndex:0];
    [self.view addSubview:self.testView]; 
    [self.testView trace]; // calling a method from the custom class
}
4

3 に答える 3

4

これを試して

if ((self = [super initWithCoder:aDecoder])) {
        if ((self = [super initWithCoder:aDecoder])) {
           NSArray * nib = [[NSBundle mainBundle]
                     loadNibNamed: @"MyView"
                     owner: self
                     options: nil];
          [self addSubview:nib[0]];
        }
        return self;
    }
于 2013-01-28T10:47:47.793 に答える
1

アプリでnibファイルを使用するには、この方法で使用することをお勧めします。簡単です。

-1)必要なすべてのコンポーネントを含むNibファイルを作成します。たとえば、UILabelとUIButtonが含まれているとします。

-2)各コンポーネントにTAG番号を付けます(例:100,101)

-3)コード内で、init内、またはviewControllerのMethodeから、必要な場所で、次のように呼び出します。

NSArray* views=[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil];
    // PS: change "MyCustomView" to your nib file name "MyView" for instance
    // and do not add the .xib extension 
UIView* myCustomView= [views objectAtIndex:0];
// always parse the retrieved components so that you could use them in a proper way
UILabel*    myLabel=(UILabel*)      [myCustomView viewWithTag:100];
UIButton*   myButton= (UIButton*)      [myCustomView viewWithTag:101];
//if you are calling this from a UIView Class
 [self addSubview:mainView]; // add the customview to the main view
//if you are calling this from a ViewController uncomment this line below
//[self.view addSubview:mainView];

これで、カスタムビューを操作できるようになり、ラベルテキストを次のように変更できます。 myLabel.text=@"someText";

ボタンにアクションを追加できます:

[myButton addTarget:self action:@selector(someAction) forControlEvents:UIControlEventTouchUpInside];
于 2013-01-28T12:30:05.910 に答える