Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在ios5中如何在UIViewController内显示UIView?_Iphone_Ios_Uiview_Uiviewcontroller - Fatal编程技术网

Iphone 在ios5中如何在UIViewController内显示UIView?

Iphone 在ios5中如何在UIViewController内显示UIView?,iphone,ios,uiview,uiviewcontroller,Iphone,Ios,Uiview,Uiviewcontroller,我在XIB文件中设计了一个UIView。基本上有一个导航栏和一个按钮来关闭UIVIew。我想在应用程序的多个UIViewController中显示此UIView。 下面是到目前为止我导入的代码。但是UIView没有显示 我的ViewController是在storyboard中设计的,但是我需要一个简单的UIView,这就是为什么我创建了一个新的自定义UIView子类以及一个同名的xib文件。该文件的所有者也设置为自定义子类。这里还需要什么 @interface BottomSlidingVie

我在XIB文件中设计了一个UIView。基本上有一个导航栏和一个按钮来关闭UIVIew。我想在应用程序的多个UIViewController中显示此UIView。 下面是到目前为止我导入的代码。但是UIView没有显示

我的ViewController是在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;
}
这就是我在UIViewController中调用自定义UIView的方式


我发现你的方法有几个问题:

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

+ (instancetype)bottomSlidingView
{
    return [[[UINib nibWithNibName:@"BottomSlidingView" bundle:nil] instantiateWithOwner:nil options:nil] lastObject];
}
实现或替代initWithFrame:在UIView子类中从NIB加载时不会调用initWithFrame

在视图控制器中,您可以使用类似以下内容来创建视图:

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

希望对您有所帮助。

如果您希望在另一个视图控制器中重用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后,所有iAction都将在child中工作


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

如果我使用的是您上面显示的类方法,即+UIView*bottomSlidingView,请详细说明如何从UIViewController调用它,因为我不知道如何在按钮c上调用它舔操作。我确实在UIViewController中实现了该方法,但是现在我得到一个错误,即…..self-BottomSlidingView*0x00000000 aDecoder NSCoder*0x0993E400调用+UIView*BottomSlidingView您应该使用[BottomSlidingView BottomSlidingView];好的……我制作了一个示例项目只是为了测试这一点。但是同样的错误也在发生。有人能解释一下这个问题吗。Xcode在这行self=[super initWithCoder:aDecoder]上显示EXC_bad_访问错误;告诉我你的困惑。我创建了一个32个视图控制器的应用程序,没有使用导航控制器、tabbar控制器或故事板,但只使用了这个概念……我在故事板中设计了几个视图控制器……还有一个是纯UIView,我使用了.Xib文件来设计。现在在其中一个V中显示这个UIViewiewControllers in storyboard我尝试了上面的代码…但是现在视图没有显示…我可以通过代码显示UIView…但是我需要多次使用它…这就是为什么我考虑使用.Xib文件…将其视为自定义操作表视图…将storyboard和.Xib组合在一起。Sushrut,抱歉,我没有在Storybo上尝试此代码ard但如果您使用的是XIB,那么它可以正常工作。如果您只有一个视图可重用,则使用XIB并生成一个mainWindow.XIB。为了生成mainWindow.XIB,请使用教程。然后在mainWindow.XIB中添加该视图,并在appdelegate中给出输出。当您想要使用此视图时,请编写[appdel.window addSubView:appdel.yourView]希望这对你有帮助
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];