1

我有一个UIView设计的XIB文件。基本上带有一个导航栏和一个按钮来关闭UIVIew. 我想UIViewUIViewControllers整个应用程序中展示这个。下面是我到目前为止所使用的代码[emnted。但是UIView没有出现

ViewControllers的设计是在storyboard但是我需要一个简单的 UIView,这就是为什么我创建了一个新的 UIView 自定义子类以及一个同名的 xib 文件。文件的所有者也设置为自定义子类。这里还需要什么?

@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;
}

这就是我UIViewUIViewController.

 -(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

我发现您的方法存在一些问题:

  1. 从 nib 文件创建视图实例,而不是使用initWithFrame:. 例如(如果自定义视图是 nib 文件中唯一的根级对象):

    + (instancetype)bottomSlidingView
    {
        return [[[UINib nibWithNibName:@"BottomSlidingView" bundle:nil] instantiateWithOwner:nil options:nil] lastObject];
    }
    
  2. 在子类中实现awakeFromNibinitWithCoder:而不是initWithFrame:(从 nib 加载时不调用)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 回答
0

你想在另一个视图控制器中重用 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 都将在 child 中工作。

删除此视图后,您必须从 parentViewController 中删除 YourViewController 否则会出现内存问题.......

于 2013-03-15T09:31:14.390 回答