【问题标题】:IOS/Objective-C: Set property in presenting view controllerIOS/Objective-C:在呈现视图控制器中设置属性
【发布时间】:2016-11-19 01:13:02
【问题描述】:

当您使用代码创建模态视图控制器时,模态控制器可以访问呈现控制器。

请阅读以下内容。这是问题的症结所在。我不想使用委托。

根据Apple docs:

当您使用 present(_:animated:completion:) 方法以模态方式(显式或隐式)呈现视图控制器时,呈现的视图控制器将此属性设置为呈现它的视图控制器。

我想设置呈现视图控制器的属性值。但是,我不会在代码中创建 VC。我使用按钮的segue。

这会产生错误:在 UIViewController 类型的对象上找不到属性 afterAdd:

   self.presentingViewController.afterAdd = YES;

其中属性afterAdd设置如下:

@property (nonatomic) BOOL afterAdd;

当链接是通过类似于上面的情节提要并且不涉及使用委托方法时,是否有任何方法可以在呈现视图控制器中设置属性的值?

【问题讨论】:

  • 这些答案忽略了presentingViewController,这是我问题的本质。
  • 我明白了。但是提到的帖子描述了最佳实践。您的代码与 presentingViewController 相关,在重构或更改导航流程后可能会有所不同。我建议您使用标记为重复的帖子中描述的一种技术。无论如何,我在下面发布您的问题的答案。

标签: ios uipresentingcontroller


【解决方案1】:

您应该将self.presentingViewController 转换为您的真实视图控制器类。像这样,只需将MyCustomViewController 替换为您的真实控制器名称:((MyCustomViewController *)self.presentingViewController).afterAdd = YES;

【讨论】:

  • 另外,如果您使用segue 进行演示,您可以在prepareForSegue:sender 函数中设置您的控制器。更多信息可以在这里找到Using Segues
  • 这是有道理的,但会给出错误“预期表达式”。
  • 没关系,我有错字。外来的性格。这行得通。谢谢。
  • 有一个错字。但是在修复它之后,它会尝试在 TabViewController 上找到嵌入呈现控制器的属性。
  • 尝试在标签栏上使用.selectedViewController,例如((MyCustomViewController *)((UITabBarController *)self.presentingViewController)).afterAdd = YES;,但正如我早先告诉你的那样 - 这是不好的做法,我相信会有更多问题。我仍然建议您尝试prepareForSegue:sender 技术。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2018-05-18
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多