【问题标题】:ios display views and viewcontrollers on part of the screenios 在部分屏幕上显示视图和视图控制器
【发布时间】:2012-10-23 21:36:14
【问题描述】:

我有这个错误,我已经为此苦苦挣扎了几天。我基本上想像 Instagram 一样制作个人资料。

当您单击上部“标签栏”中的前两个按钮之一时,内容将显示在下部。屏幕的上半部分保持不变。我有一些 UIViewControllers 和一些 UITableViewController。我有 5 个按钮来显示视图控制器。我的问题是我可以显示一个 tableviewcontroller,但是如果我尝试显示第二个然后返回到第一个,例如,它会卡在我显示的最后一个。我希望这足够清楚。这是显示视图控制器的代码。

- (IBAction)wallButtonPressed:(id)sender
{
    if(!_userWallViewController) {
        self.userWallViewController = [[WallViewController alloc] init];
        self.userWallViewController.activityFeedTableView.bounds = self.containerView.bounds;
    }

    [self.currentViewController.view removeFromSuperview];
    [self.currentViewController removeFromParentViewController];
    self.currentViewController = self.userWallViewController;
    self.userWallViewController.searchURLString = [NSString stringWithFormat:@"/event/user/%@", self.userID];
    self.userWallViewController.containerView = self.containerView;
    [self.containerView addSubview:self.userWallViewController.view];
    [self addChildViewController:self.userWallViewController];
    [self.userWallViewController.view setNeedsDisplay];
    [self.userWallViewController viewWillAppear:YES];
}

containerView 是一个占据整个屏幕下部的 UIView。 currentViewController 是一个占位符 viewController,而 userWallViewController 是一个 UITableViewController。

非常感谢任何形式的帮助。这是一个真正的窃听情况。谢谢

【问题讨论】:

  • 这些属性设置器是否被覆盖?您可能应该在将视图添加到容器之前明确设置视图的框架。 self.currentViewController.view.frame = self.containerView.bounds;还有一些其他提示:子 vc 不需要了解容器。 viewWillAppear、didAppear、willDisappear、didDisappear 应在显式或隐式处理时正确处理(不应该真正影响您的错误,但通常确保事情按预期工作)。在添加视图之前添加子 vc。不需要显式显示。
  • 嘿。我写了 self.currentViewController.view.frame = self.containerView.bounds 因为当我试图显示 tableviewcontrollers 时,它们几乎会全屏呈现。此外,添加最后两行只是为了查看它是否以任何方式修复了我的错误。当然,它没有。我还尝试在添加视图之前添加子 vc。不工作。帮助我解决这个问题不会没有大量的感谢和赞美:)
  • 您可以尝试在根控制器的 viewDidLoad 中添加视图和子视图控制器,然后设置选定视图,只需隐藏和取消隐藏正确的视图。您也可以将逻辑分解为另一种方法,以便于跟踪;按钮触发 [self showViewWithIndex:[buttonArray indexOfObject:button]]。完成这项工作后,您可以尝试通过根据需要删除视图来进行优化,但这可能是一种更简单的方法。

标签: ios uiviewcontroller uitableview instagram


【解决方案1】:

我犯了一个难以识别的愚蠢错误,@Matt 的建议有所帮助。

[self.fanOfViewController.containerView addSubview:self.fanOfViewController.userSimpleTableView];

[self.currentViewController.view removeFromSuperview];
[self.currentViewController removeFromParentViewController];

self.fanOfViewController.containerView = self.containerView;
[self addChildViewController:self.fanOfViewController];
[self.containerView addSubview:self.fanOfViewController.view];

//CLEAN UP THE CONTAINER VIEW BY REMOVING THE PREVIOUS ADDED TABLE VIEWS
[self.userWallViewController.activityFeedTableView removeFromSuperview];
[self.userFansViewController.userSimpleTableView removeFromSuperview];

每次我通过按下相应的按钮从它的视图控制器中添加一个新的 tableView 时,我都将它堆叠在当前的视图容器中。当我试图从层次结构中删除相应的 viewController 然后再次添加时,没有调用 viewDidLoad 方法(它只是第一次调用)。那是我删除tableView的逻辑的地方。

现在我也在按下按钮时添加它,并从“堆栈”中删除其他 tableViews。这可能不是最好的方法,但我确实计划对其进行优化。我希望这足够清楚,并且可以帮助遇到此问题的任何人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多