iOS13 UIViewController isModalInPresentation 在 ObjectiveC 中没有设置器所以不能设置?
Posted
技术标签:
【中文标题】iOS13 UIViewController isModalInPresentation 在 ObjectiveC 中没有设置器所以不能设置?【英文标题】:iOS13 UIViewController isModalInPresentation has no setter in ObjectiveC so cannot be set? 【发布时间】:2019-10-01 18:11:13 【问题描述】:我正在尝试对我用 ObjectiveC 编写的应用程序进行一些更新,以采用新的 ios 13 功能。我正在研究模态呈现视图控制器的新方式的交互式解除处理,在检测到我的控制器中的更改后,我希望停止交互式解除并向用户显示 Apple 推荐的对话。尝试使用以下代码进行此操作
self.isModalInPresentation = YES;
无法编译并出现以下错误
No setter method 'setIsModalInPresentation:' for assignment to property
从我的 ObjectiveC 项目中转到此属性的实现,转到 ObjectiveC 标头,其属性定义如下
// modalInPresentation is set on the view controller when you wish to force the presentation hosting the view controller into modal behavior. When this is active, the presentation will prevent interactive dismiss and ignore events outside of the presented view controller's bounds until this is set to NO.
@property (nonatomic, getter=isModalInPresentation) BOOL modalInPresentation API_AVAILABLE(ios(13.0));
查看 swift 项目中的相同属性会发现以下 swift 定义
// modalInPresentation is set on the view controller when you wish to force the presentation hosting the view controller into modal behavior. When this is active, the presentation will prevent interactive dismiss and ignore events outside of the presented view controller's bounds until this is set to NO.
@available(iOS 13.0, *)
open var isModalInPresentation: Bool
这只是 Apple 对 ObjectiveC 源代码的疏忽吗?我找不到任何 setIsModalInPresentation 函数或直接通过 _isModalInPresentation 访问它。自从我在 ObjectiveC 中做任何重要的工作以来已经有一段时间了,所以我的语言知识已经生疏了,我是否应该在我的子类中综合该属性?由于已经实现了一个吸气剂,我什至不确定它是如何工作的。
我使用的是 Xcode 11.0,我想我可以看看这是否在更高版本的 Xcode/iOS 中得到修复?
感谢任何帮助,干杯
【问题讨论】:
【参考方案1】:试试这个:
self.modalInPresentation = YES;
如题,定义如下,
@property (nonatomic, getter=isModalInPresentation) BOOL modalInPresentation;
这意味着您需要将其设置为self.modalInPresentation = YES;
。 isModalInPresentation
是一个吸气剂。
【讨论】:
谢谢,这已经奏效了。我的眼睛一定很累。真的很奇怪,我还可以通过添加 @property BOOL isModalInPresentation 来解决问题并且行为仍然有效;进入我的 .m 文件中的子类接口。不太清楚这个新属性的功能是如何工作的。很高兴能正确修复它,非常感谢!!现在,在我的应用程序中推出支持这个新演示文稿所需的内容需要进行更多重写。干杯!【参考方案2】:使用 API 可用性检查这样做很好!
VSDrawViewController *drawViewController = [[VSDrawViewController alloc] init];
// .. setup delegate and stuff, if needed.
if (@available(iOS 13.0, *))
drawViewController.modalInPresentation = YES;
else
// Handle old iOS changes
【讨论】:
谢谢,好点子。我将很快开始在旧模拟器上进行测试。我将在另一个问题中提出的最大担忧是,一个对象如何包装实现一个可选委托,并对委托本身进行 API 可用性检查。以上是关于iOS13 UIViewController isModalInPresentation 在 ObjectiveC 中没有设置器所以不能设置?的主要内容,如果未能解决你的问题,请参考以下文章
iOS13 UIViewController isModalInPresentation 在 ObjectiveC 中没有设置器所以不能设置?
Xcode 11 & iOS13,使用 UIKIT 不能改变 UIViewController 的背景颜色
iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView