提问人:Ram2048 提问时间:6/23/2021 更新时间:6/23/2021 访问量:62
UIMenuController 未显示
UIMenuController doesn't show up
问:
我正在尝试解决一个问题两天,但我真的不知道该怎么办。我尝试了几种解决方案,但没有任何帮助。
情况是这样的:我有一个 UIViewController,并且添加了 UITextView 的子类作为子视图。
-(void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
_textView = [[DPTextView alloc] initWithFrame:self.view.bounds];
[_textView setText:[NSString stringWithContentsOfFile:_path encoding:NSUTF8StringEncoding error:nil]];
_textView.editable = NO;
_textView.selectable = YES;
_textView.delegate = self;
_textView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:_textView];
//[self.view becomeFirstResponder];
//[self becomeFirstResponder];
//[_textView becomeFirstResponder];
}
当我打开这个 UIViewController 时,我看到文本。如果选择文本,则看不到 UIMenuController。我已经覆盖了 UITextView (DPTextView) 子类的一些方法,如下所示:
-(BOOL)canBecomeFirstResponder {
return TRUE;
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(copy:))
return YES;
return NO;
}
但它没有出现。一段时间后,我注意到如果我按照一些步骤操作,就会出现 UIMenuController:
- 此控制器由另一个控制器提供。我们称它们为 Controller1(具有 UISearchController 和 UITableView)和 Controller2(具有 DPTextView)。
- 我点击搜索栏进入 Controller1。
- 我关闭了键盘点击搜索栏旁边的“取消”。
- 我点击显示 Controller2 的 UITableViewCell。
按照这些步骤,当我在 Controller2 中选择文本时,会出现 UIMenuController!我真的不知道为什么!我以为按下搜索栏时发生了一些事情,比如控制器成为第一响应者或类似的东西(我已经尝试调用“becomeFirstResponder”,正如您可以在上面的代码中读到的那样 - 注释的代码行)。
请注意,如果我在 Controller1 中点击并按住 UITableViewCell,我也应该获取 UIMenuController,因为我已经实现了这些方法:
-(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath {
return TRUE;
}
-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
return (action == @selector(copy:));
}
-(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
if (action == @selector(copy:)) {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[[UIPasteboard generalPasteboard] setString:cell.textLabel.text];
}
}
但它也没有出现在这里。如果使用搜索控制器后出现,则出现相同的情况。
有什么建议吗?我不知道这是否有帮助,但 Controller1 和 Controller2 是以模式呈现的。
答: 暂无答案
评论