IOS/Objective-C:在呈现视图控制器中设置属性

Posted

技术标签:

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

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

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

根据Apple docs:

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

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

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

   self.presentingViewController.afterAdd = YES;

其中属性afterAdd设置如下:

@property (nonatomic) BOOL afterAdd;

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

【问题讨论】:

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

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

【讨论】:

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

以上是关于IOS/Objective-C:在呈现视图控制器中设置属性的主要内容,如果未能解决你的问题,请参考以下文章

IOS / Objective-C / Storyboard:从左到右的自定义Segue在视图控制器之间创建黑条

在 iOS 7/Objective-C 中,如何以编程方式将 UIPickerView 捕捉到它所在的父视图的底部?

IOS/Objective-C:无结果时在tableview的背景视图中显示消息

IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?

IOS/Objective-C:检测自定义表格视图单元格中的按钮按下?

ios/objective-c: 检测 tabbarbutton 按下事件