在另一个UIViewController中嵌入UIViewController视图

时间:2013-11-12 00:04:53

标签: ios iphone objective-c uitableview uiviewcontroller

在我的应用中,我有一个 login-register-forgotpasword 线框。该过程的每个步骤都在单独的UIViewController中实现,所有这些步骤都位于同一Storyboard内,并且每个控制器之间的过渡都是动画的。到目前为止一切都很好。

现在我们已经改变了设计,因此所有视图都具有相同的背景元素和标题(不完全是UINavigationBar),我不喜欢动画的感觉到看起来总是看起来实际上是相同的,但只是显示一个不同的形式。所以我正在考虑不同的方法,而不是推动整个控制器,只显示/隐藏其视图,但保持在同一个控制器.-

1)我的第一次尝试是实例化我想要显示的视图的控制器,并将其添加到当前视图中。像.-

之类的东西
- (IBAction)btnRegisterPressed:(id)sender {
    _viewHome.hidden = YES;    
    RegisterController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"registerNewUser"];
    [self.view addSubview:controller.view];
}

这个是完美的,因为我对我的表格使用静态UITableViews,所以据我所知,每个人都需要一个UITableViewController。但似乎IBOutletsIBActions被打破了。 这种方法在某种程度上是否可行?如果是这样,那被认为是一种不好的做法?

2)我的第二个选择是在一个控制器内创建所有视图,并正确显示/隐藏它们。这很难维护,我有可能忘记静态UITableViews

任何人都可以给我一些关于哪个选项会更好的建议,或者指出我还缺少任何其他可能的方法吗?

3 个答案:

答案 0 :(得分:1)

你的选项#1不适合写,但接近你应该考虑的方法。您可以添加嵌套不同UIViewController的视图,但是当您这样做时,您应该使用Managing Child View Controllers in a Custom Container中描述的方法,以便父控制器正确管理其子控制器。

答案 1 :(得分:1)

您可以根据需要为同一个控制器使用任意数量的表视图。委托方法包含触发方法本身的对象。

遵循这种方法(我不建议)你可以标记你的tableviews,然后执行:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    if (tableView.tag == 1) {
        doStuff;
    } else if (tableView.tag == 2) {
        doOtherStuff;
    }
}

答案 2 :(得分:0)

嗯,就个人而言,我觉得我们应该让最终用户保持简单直接,以便快速搞定您的应用。动画在这方面起着重要作用。点击tableview的单元格会推送另一个表视图,并且有不同的UI小部件(如雪佛龙)指示转换,用户不会感到惊讶。

只要你有适当的动画,就可以在单个屏幕上显示所有内容并根据用户的操作隐藏/取消隐藏它们。例如,您可能已经看到TableView部分折叠/展开。

您需要根据自己的申请进行权衡,找出最合适的选择。无论你决定我的建议是添加漂亮的动画而不是简单的隐藏/取消隐藏。