iOS将子视图带回来

时间:2015-11-10 19:22:57

标签: ios objective-c uiviewcontroller

我希望将视图显示在另一个视图的顶部。

这是我的视图层次结构:

enter image description here

基本上我想把按钮(Start Again)带到属于PageViewController的UIImageView前面。所以我希望能够使用图像顶部的按钮进行滚动。

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Create the data model
    _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"];
    _pageImages = @[@"page1.png", @"page2.png", @"page3.png", @"page4.png"];

    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    // Change the size of page view controller
    self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30);

    [self addChildViewController:_pageViewController];
    [self.view addSubview:_pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self];

}

3 个答案:

答案 0 :(得分:1)

您是否尝试使用以下代码?

[self.view bringSubviewToFront:yourButtonView];

答案 1 :(得分:0)

正如 @iamataptool 建议我将PageViewController带回来:

[self.view sendSubviewToBack: _pageViewController.view];

答案 2 :(得分:0)

您似乎正在使用故事板和程序化的UIView并行定位。因此,您有不同的解决方案:

通过手动向上推动来修复症状< - 不推荐通过

将按钮视图推到所有其他视图(也包括嵌入式视图)前面
[self.view bringSubviewToFront:yourButtonView];

尽管如此,如上所述,这只会修复症状,但如果你想添加更多的“覆盖”字样。元素,你必须为所有这些元素做到这一点。更好的是:

或程序化方法: 在将UIPageViewController的视图添加到视图层次结构后,以编程方式添加UIButton而不是故事板。所以在你这样做之后

[self.view addSubview:_pageViewController.view];

只需使用您的配置实例化UIButton并通过

添加它
[self.view addSubview:yourProgrammaticallyCreatedButton];

或添加容器视图< - 我的推荐 在您的按钮下添加另一个视图(我们可以称之为容器视图) - 但不要将该按钮添加到该容器视图中。给它约束与UIViewController视图具有相同的框架。保持IBOutlet UIView并使用此视图添加UIPageViewControllers视图。

 _pageViewController.view.frame = self.containerView.bounds;
 [self.containerView addSubView: _pageViewController.view]