【问题标题】:Understanding View Controllers了解视图控制器
【发布时间】:2011-07-11 15:34:15
【问题描述】:

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

我希望我很清楚。

【问题讨论】:

  • 您希望访问什么对象?也许有人可以将您指向访问它的变量。
  • 我想从模态视图访问 FeedBackView 控制器。它有一个方法可以在选择器中选择的类别之后设置类别文本字段。在基于简单视图的应用程序中,我 cud 使用 [self.parentViewController setCategoryText](在 FeedBackController 中定义的 setCategoryText)。但是在这个中,parentViewController 是一个 tabBarController。

标签: iphone uinavigationcontroller uitabbarcontroller modalviewcontroller


【解决方案1】:

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

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

我的记忆很模糊,也许有人需要纠正我。但是,我仍然相信这是很容易理解(也可能是练习)presentModal... 仅适用于根视图控制器的事情。

【讨论】:

  • 好的,谢谢。我想知道,有没有办法从任何视图中获取 rootViewController?
  • 没有'内置'方法来获取视图控制器,所以你需要自己在根vc和其他视图之间进行通信。这些视图可能由根 vc 的视图保留,当然,根 vc 也保留了这些视图。所以不要通过在某些视图对象中保留根vc来创建保留循环。您可以将根 vc 分配(不保留)到视图的属性,这基本上意味着根 vc 成为视图对象的委托。在这种情况下,委派是一种很好的做法,但如果满足您的需求,您也可以使用通知或 KVO。
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 2018-01-01
  • 2014-02-25
  • 2015-06-06
  • 1970-01-01
  • 2017-02-27
  • 2017-01-27
  • 2014-04-27
相关资源
最近更新 更多