2

CustomView.xibファイルを使用してCustomView:UIViewを作成します。次に、ビューを別のXIB(例:UIViewController.xib)にドラッグして使用し、クラス:customViewを選択します。

CustomViewとaddSubViewをanotherViewに初期化すると、正常にロードできます。

- (void)viewDidLoad{
    //Success load NIB
    CustomView *aView = [[CustomView alloc] initWithFrame:CGRectMake(40, 250, 100, 100)];
    [self.view addSubview:aView];
}

//CustomView.m

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"INIT");
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        [[nib objectAtIndex:0] setFrame:frame];
        self = [nib objectAtIndex:0];
    }
    return self;
}

この場合、CustomCellを別のXIBに描画して再利用し、クラスをCustomViewとして指定します。awakeFromNibが呼び出されることは知っていますが、CustomView.xibをロードする方法がわかりません。どうやってするか?

*編集:

initWithCoderは、クラスを指定するときにも呼び出されますが、ループが作成され、loadNibNamedでクラッシュします。どうして?

- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@"Coder");
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"QSKey" owner:nil options:nil];
        [[nib objectAtIndex:0] setFrame:self.bounds];
        self = [nib objectAtIndex:0];
    }
    return self;
}
4

1 に答える 1

1

ビュー コントローラーでカスタム xib を直接ドラッグすることはできません。ただし、そのスーパー クラス ビューをドラッグして、そのクラスをカスタム クラスに設定します。カスタム クラスに従って配置するオブジェクトにそのプロパティを接続します。

次のコードを使用して、カスタム xib を直接ロードできます。

// コードを使用して xib をロードします ....

   QSKey *keyView=[[QSKey alloc] init];
   NSArray *topObjects=[[NSBundle mainBundle] loadNibNamed:@"QSKey" owner:self options:nil];

for (id view in topObjects) {
    if ([view isKindOfClass:[QSKey class]]) {
        keyView=(QSKey*)view;
    }
}

keyView.label.text=@"CView";
[keyView setFrame:CGRectMake(0, 0, 100, 100)];
[keyView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:keyView];

here label is UILabel object you have used in your custom class as its property.


//Load custom View using drag down objects of type Custom Class Super class.

for (QSKey *aView in self.view.subviews) {
    if ([aView isKindOfClass:[QSKey class]]) {
        [self addGestureRecognizersToPiece:aView];
        aView.label.text=@"whatever!";
    }
}

Here label is object of UILabel you have to place on your dragged View to view controller's xib view.Change that view's class to your Custom Class.Then it will will show its label property in outlet connect it to your UILabel object placed over dragged view.

ここに作業コードTestTouchonViewがあります

そして、スクリーンショットは次のように表示されます。

ここに画像の説明を入力

于 2013-02-22T05:16:19.303 に答える