0

我有一个带有4个选项卡的TabBar应用程序。所有四个标签都有导航控制器。在设置选项卡中,我有一个包含“反馈”单元格的表格。单击单元格时,会推送包含带有几个字段的反馈表单的FeedBackView控制器。这有一个类别的文本框。当文本框被触摸时,模式视图控制器(FeedBackModalView)会显示一个选择器。在FeedBackModalView控制器的viewDidLoad方法中,我输入NSLog(@"%@", self.parentViewController).在控制台中,它将parentViewController显示为TabBar控制器。这是为什么?它不应该显示FeedBackView控制器作为父视图,因为我在该控制器中呈现模态视图?了解视图控制器

我希望我很清楚。

+0

你希望获得什么对象?也许有人可以指出你访问它的变量。 – 2011-03-09 06:20:26

+0

我想从模态视图访问FeedBackView控制器。它有一个方法,它将在选择器中选择的类别之后设置类别文本字段。在基于简单视图的应用程序中,我使用[self.parentViewController setCategoryText](在FeedBackController中定义了setCategoryText)。但在这一个parentViewController是一个tabBarController。 – 2011-03-09 06:24:06

回答

1

使用presentModalViewController与UITabBarController有一些问题,我相信该方法的内部行为在最近的SDK版本中不断变化。底线是,您应该使用根视图控制器来模态呈现视图控制器。如果您正在使用标签栏界面,那么它将成为UITabBarController对象。

在旧版本的SDK中,当我在标签栏控制器内的视图控制器中呈现模态视图时,模态视图未全屏显示,这不是预期或记录的行为。现在一个模式视图似乎全屏出现在任何地方,如果[self presentModalViewController:animated:]方法内部检查self并且它具有非零parentViewController属性,我将不会感到惊讶,将消息发送给父视图控制器(这将解释您的观察) 。

我的记忆很模糊,也许有人要纠正我。不过,我仍然相信这是直接理解(也可能是练习)presentModal...只适用于根视图控制器。

+0

好的谢谢。我想知道,有没有办法从任何视图获取rootViewController? – 2011-03-09 06:31:09

+0

没有内置的方法来获得视图控制器,所以你需要自己在根vc和其他视图之间进行通信。这些视图可能会保留在根vc的视图中,当然,它是由根vc保留的。因此,不要通过在某些视图对象中保留root vc来创建保留周期。您可以将根vc分配(不保留)到视图的属性,这基本上意味着根vc成为视图对象的委托。在这种情况下委托是一种很好的做法,但如果满足您的需求,您也可以使用通知或KVO。 – MHC 2011-03-12 15:57:39

相关问题