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?