我正在尝试将一些 3D 触摸合并到应用程序中,但遇到了一个奇怪的问题,即forceTouchCapability
检查返回但nil
不在.viewDidLoad
viewWillAppear/viewDidAppear
我知道这仅在 iOS 9+ 上可用,因此我添加了检查以验证traitCollection
视图控制器上的属性是否响应forceTouchCapability
如下:
- (void)loadView {
self.view = [[MyView alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Checking the force touch availability here
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
// This won't get called because forceTouchCapability is returning nil
// which corresponds to UIForceTouchCapabilityUnknown
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}
}
在if
语句处有断点的 LLDB 中,输入po [self.traitCollection forceTouchCapability]
返回nil
对应于UIForceTouchCapabilityUnknown
. 然而,它traitCollection
本身不是nil
。
根据 UIForceTouchCapabilityUnknown 的文档:
UIForceTouchCapabilityUnknown: The availability of 3D Touch is unknown. For example, if you create a view but have not yet added it to your app’s view hierarchy, the view’s trait collection has this value.
此时视图是否尚未添加到层次结构中?
我很好奇是否有人以前遇到过这个问题以及如何解决这个问题?我想避免在其中添加它,viewDidAppear
因为这可能会被调用很多次。
如果有帮助,我将在带有 Xcode 7.2 的 iOS 9.1 上的 6S 上运行它