1

UIViewデザインインXIBファイルがあります。基本的に、ナビゲーションバーとを閉じるためのボタンがありますUIVIew。これをアプリ全体UIViewでいくつか表示したいと思います。UIViewControllers以下は私がこれまでに実装したコードです。ただし、UIViewは表示されません

ViewControllersはで設計されてstoryboardいますが、単純なUIViewが必要だったため、同じ名前のxibファイルとともにUIViewの新しいカスタムサブクラスを作成しました。ファイルの所有者もカスタムサブクラスに設定されています。ここで他に何が必要ですか?

@interface BottomSlidingView : UIView   //this is my UIView
{

}


@implementation BottomSlidingView          

 - (id)initWithFrame:(CGRect)frame
 {
   self = [super initWithFrame:frame];
   if (self) {
   [self setUserInteractionEnabled:YES];
   NSLog(@"Bottom View Loaded");   //I get this log entry but the view doesn't showup.

}
    return self;
  }

- (BOOL)loadMyNibFile {
if (![[NSBundle mainBundle] loadNibNamed:@"BottomSlidingView" owner:self options:nil]) {
    return NO;
}
    return YES;
}

UIViewそして、これは私が私のカスタムを呼び出す方法ですUIViewController

 -(void)shareButton:(UIBarButtonItem *)button
 {
   NSLog(@"share button clicked");
   BottomSlidingView *bsv = [[BottomSlidingView alloc] initWithFrame:CGRectMake(20, 480, 280, 420)];
   [bsv loadMyNibFile];
   [self.view insertSubview:bsv belowSubview:self.optionsToolBar]; //this toolbar is a subview that I am adding to this view controller.

 }
4

2 に答える 2

0

別のView ControllerでUIViewControllerのUIViewを再利用したい場合は、これを使用する必要があります....

YourViewController * child = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];//View controller of view , you want to reuse
[self.view addSubView:child.YourView]; //YourView = Name of view, you want to reuse
[self addChildViewController:child];
[child release];

childViewController を追加すると、すべての IBActions が子で機能します。

そして、このビューを削除した後、yourViewController を parentViewController から削除する必要があります。そうしないと、メモリの問題が発生します........

于 2013-03-15T09:31:14.390 に答える
0

あなたのアプローチにはいくつかの問題があります。

  1. でインスタンス化するのではなく、nib ファイルからビュー インスタンスを作成しますinitWithFrame:。例 (カスタム ビューが nib ファイル内の唯一のルート レベル オブジェクトである場合):

    + (instancetype)bottomSlidingView
    {
        return [[[UINib nibWithNibName:@"BottomSlidingView" bundle:nil] instantiateWithOwner:nil options:nil] lastObject];
    }
    
  2. サブクラスにawakeFromNibまたはinitWithCoder:の代わりにinitWithFrame:(nibs からロードするときに呼び出されない) を実装しますUIView

ビュー コントローラーでは、次のようなものを使用してビューを作成します。

- (void)shareButtonPressed:(id)sender
{
    BottomSlidingView *slidingView = [BottomSlidingView bottomSlidingView];
    [slidingView setFrame:CGRectMake(20, 480, 280, 420)];
    [[self view] insertSubview:slidingView belowSubview:[self optionsToolBar]];
}

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

于 2013-02-18T05:25:15.373 に答える