我最近在我的应用程序中添加了长按表格单元格内的 UILabel 以使“复制”菜单出现的功能,以便用户可以将文本复制到粘贴板。它在模拟器中和直接构建到设备时都很好用。但是,当我构建和存档(以便我可以推送到 TestFlight)时,该功能不起作用。
我尝试了这个 Stack Overflow question中的解决方案,但它没有用(而且似乎不相关,因为我正在为 iOS 5.0+ 构建)。我在构建设置中设置了优化级别。None [-O0]
- 如果它在 Xcode 中运行良好,我该如何调试失败的地方?(IE,是手势识别器不工作,还是 UIMenuController 等)
- 为什么存档副本的行为与构建到设备的副本不同?
这是相关代码(尽管我 90% 确定问题不是此代码,而是一些 Xcode 设置):
添加手势识别器:
UIGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPressForCopy:)];
[_postLabel addGestureRecognizer:longPress];
[self addSubview:_postLabel];
手柄长按
- (void)handleLongPressForCopy:(UILongPressGestureRecognizer *)recognizer {
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
NSAssert([self becomeFirstResponder], @"Sorry, UIMenuController will not work with %@ since it cannot become first responder", self);
UIMenuController *theMenu = [UIMenuController sharedMenuController];
CGRect displayRect = CGRectMake(_postLabel.frame.origin.x, _postLabel.frame.origin.y, 10, 0);
[theMenu setTargetRect:displayRect inView:self];
[theMenu setMenuVisible:YES animated:YES];
break;
default:
break;
}
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
return (action == @selector(copy:) );
}
正如我所说,它对设备和模拟器的构建效果很好,而不是在构建和存档之后。