可编辑的 UITextView 可以嵌入到 UIPopoverController 中吗?

Posted

技术标签:

【中文标题】可编辑的 UITextView 可以嵌入到 UIPopoverController 中吗?【英文标题】:Can an editable UITextView be embedded in a UIPopoverController? 【发布时间】:2012-06-04 03:27:29 【问题描述】:

我正在尝试在 UIPopoverController 中嵌入可编辑的 UITextView,但结果...奇怪。我采取的步骤是:

    创建一个自定义 UIViewController 类,并使用该控制器创建一个 .xib 文件,其中包含一个 UITextView。 当应该调出控制器的 UI 动作发生时(内部修饰),我从 .xib 文件中实例化控制器及其视图。 我创建了一个新的 UIPopoverController,我刚刚将视图控制器实例化为内容视图。 我使用 presentPopoverFromRect:inView:permittedArrowDirections:animated:

下面是一些示例代码:

- (void)noteButtonPressed:(id)sender 
    self.noteview = [[MyTextPopupViewController alloc] initWithNibName:@"MyTextPopupViewController" bundle:nil ];
    UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:self.noteview];
    self.popover = popoverController;
    self.popover.delegate = self;
    [self.popover presentPopoverFromRect:((UIView*)sender).frame
                                  inView:self.view
                permittedArrowDirections:UIPopoverArrowDirectionAny
                                animated:YES];

然后,在 MyTextPopupViewController 中,我确保文本视图是第一个调出键盘的响应者:

- (void)viewDidAppear:(BOOL)animated 
    [self.view becomeFirstResponder];

    [super viewDidAppear:animated];

这一切都有效......直到它不起作用。有时,它工作得很好;其他时候,无论是立即还是在几次击键后,应用程序都会通过退出主事件循环(!)而崩溃。不会抛出异常(至少不会被 lldb 捕获),但应用程序会在模拟器和硬件上停止。

有什么想法吗?有没有人成功完成这项工作,或者确定没有?

【问题讨论】:

MyTextPopupViewController 中,您是否实现textView:shouldChangeTextInRange:replacementText:(或任何其他可能导致问题的委托方法)?如果是这样,请发布该代码。 另外,您应该在viewDidAppear 中切换两行,以便在您执行任何操作之前正确调用 super。 我目前没有实现任何 UITextViewDelegate 方法。 并且在 viewDidAppear: 中反转这些行不会改变行为。 绝对有可能在弹出窗口中有一个可编辑的 UITextView。我在运输应用程序中进行了这样的设置,没有问题(尽管我没有看到您的代码有任何明显错误)。我建议让UITextView 成为第一响应者而不是视图控制器 【参考方案1】:

我认为 UIPopoverController 实例需要成为您代码中的一个属性。

【讨论】:

以上是关于可编辑的 UITextView 可以嵌入到 UIPopoverController 中吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不隐藏键盘的情况下使 UITextView 处于非活动状态(可编辑 = 否)?

嵌入在 UITextView 中的三列表

UITextView 光标在编辑时完全消失了

UIAlertController 内的多行可编辑文本 UITextview?

如何在(有时)可编辑的 UITextView 中启用数据检测器

UIAlertController中的多行可编辑文本UITextview?