Iphone 了解视图控制器

Iphone 了解视图控制器,iphone,uinavigationcontroller,uitabbarcontroller,modalviewcontroller,Iphone,Uinavigationcontroller,Uitabbarcontroller,Modalviewcontroller,我有一个带有4个选项卡的TabBar应用程序。所有四个选项卡都有导航控制器。在“设置”选项卡中,我有一个带有“反馈”单元格的表格。单击单元格时,将推送一个FeedBackView控制器,其中包含一个带有几个字段的反馈表单。这有一个用于分类的文本字段。触摸文本字段时,模态视图控制器(FeedBackModalView)将显示一个选择器。在FeedBackModalView控制器的viewDidLoad方法中,我键入了NSLog(@“%@”,self.parentViewController)。在控

我有一个带有4个选项卡的TabBar应用程序。所有四个选项卡都有导航控制器。在“设置”选项卡中,我有一个带有“反馈”单元格的表格。单击单元格时,将推送一个FeedBackView控制器,其中包含一个带有几个字段的反馈表单。这有一个用于分类的文本字段。触摸文本字段时,模态视图控制器(FeedBackModalView)将显示一个选择器。在FeedBackModalView控制器的viewDidLoad方法中,我键入了
NSLog(@“%@”,self.parentViewController)。
在控制台中,它将parentViewController显示为TabBar控制器。为什么呢?它不应该将反馈视图控制器显示为父视图吗,因为我正在该控制器中显示模态视图


我希望我是清楚的

presentModalViewController
与UITabBarController一起使用存在一些问题,我相信在最近的SDK版本中,该方法的内部行为一直在发生变化。底线是,您应该使用根视图控制器以模态方式呈现视图控制器。如果您使用的是选项卡栏界面,则该界面将成为UITabBarController对象

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


我的记忆模糊,也许得有人纠正我。但是,我仍然相信理解(也可能练习)presentModal是最简单的…只适用于根视图控制器。

您希望访问什么对象?也许有人可以给你指出访问它的变量。我想从模态视图访问反馈视图控制器。它有一个方法,可以在选择器中选择的类别之后设置类别文本字段。在基于视图的简单应用程序中,我使用[self.parentViewController setCategoryText](在反馈控制器中定义的setCategoryText)。但是在这个例子中,parentViewController是一个tabBarController。好的,谢谢。我想知道,有没有一种方法可以从任何视图中获取rootViewController?没有“内置”方法来获取视图控制器,因此您需要自己在根vc和其他视图之间进行通信。这些视图可能由根vc的视图保留,当然,根vc也会保留这些视图。因此,不要通过在某些视图对象中保留根vc来创建保留循环。您可以将根vc分配(而不是保留)给视图的属性,这基本上意味着根vc成为视图对象的委托。在这种情况下,委派是一种很好的做法,但如果满足您的需要,您也可以使用通知或KVO。