尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃

2024-04-23

下面是我在 iMessage 应用程序中的完整代码。

class MessagesViewController: MSMessagesAppViewController {

@IBOutlet weak var messageView: UITextView!

fileprivate func setupMessageView() {
    messageView.delegate = self

    messageView.layer.cornerRadius = 10
    messageView.layer.borderColor = UIColor.black.cgColor
    messageView.layer.borderWidth = 5

    messageView.text = "Tap to enter a message"
    messageView.textColor = UIColor(red:0.80, green:0.81, blue:0.82, alpha:1.0)
    messageView.textAlignment = .center

    messageView.font = UIFont.systemFont(ofSize: 20)

    messageView.textContainerInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}

func initialize() {
    setupMessageView()
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.initialize), userInfo: nil, repeats: false)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Conversation Handling

override func willBecomeActive(with conversation: MSConversation) {
    // Called when the extension is about to move from the inactive to active state.
    // This will happen when the extension is about to present UI.

    // Use this method to configure the extension and restore previously stored state.
}

override func didResignActive(with conversation: MSConversation) {
    // Called when the extension is about to move from the active to inactive state.
    // This will happen when the user dissmises the extension, changes to a different
    // conversation or quits Messages.

    // Use this method to release shared resources, save user data, invalidate timers,
    // and store enough state information to restore your extension to its current state
    // in case it is terminated later.
}

override func didReceive(_ message: MSMessage, conversation: MSConversation) {
    // Called when a message arrives that was generated by another instance of this
    // extension on a remote device.

    // Use this method to trigger UI updates in response to the message.
}

override func didStartSending(_ message: MSMessage, conversation: MSConversation) {
    // Called when the user taps the send button.
}

override func didCancelSending(_ message: MSMessage, conversation: MSConversation) {
    // Called when the user deletes the message without sending it.

    // Use this to clean up state related to the deleted message.
}

override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    // Called before the extension transitions to a new presentation style.

    // Use this method to prepare for the change in presentation style.
}

override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    // Called after the extension transitions to a new presentation style.

    // Use this method to finalize any behaviors associated with the change in presentation style.
}

}

extension MessagesViewController: UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
    if textView == messageView {
        requestPresentationStyle(.expanded)
        if textView.textColor == UIColor(red:0.80, green:0.81, blue:0.82, alpha:1.0) {
            textView.text = nil
            textView.textAlignment = .left
            textView.textColor = UIColor.black
            textView.font = UIFont.systemFont(ofSize: 20)
        }
    }
}

func textViewDidEndEditing(_ textView: UITextView) {
    if textView == messageView {
        if textView.text.isEmpty {
            textView.text = "Tap to enter a message"
            textView.textAlignment = .center
            textView.textColor = UIColor(red:0.80, green:0.81, blue:0.82, alpha:1.0)
            textView.font = UIFont.systemFont(ofSize: 20)
        }
    }
}
}

它有一个UITextView,然后我尝试输入数据。我在执行此操作时遇到一个奇怪的问题。

在初始加载时,如果我点击UITextView,调用扩展模式,但键盘不向上滑动。需要再次点击键盘才能向上滑动。

在日志中,我能够发现textViewDidBeginEditing and textViewDidEndEditing第一次点击时会连续调用方法。不知道为什么会这样!?

无论如何,更让我感兴趣的是现在发生的事情。我可以手动将模式更改为压缩模式,然后再更改为扩展模式。如果在扩展模式下,一旦我点击,键盘就会向上滑动。但是,如果我在紧凑模式下点击,应用程序就会崩溃!

这种情况经常发生。在模拟器和真实设备上。我不知道如何解释这种行为。

无论我将模式从紧凑模式更改为扩展模式再返回多少次,我都可以在扩展模式下输入文本。但是,在第一次点击后,在紧凑模式下,这种情况再也不会发生。

有人有这个问题吗?或者你可以复制这个吗?这是苹果的一个错误吗?


如果您需要在用户点击文本字段后更改呈现样式,您可以添加延迟以确保不会与过渡发生冲突。

最初阻止键盘显示可能会更好(您可能需要在 VC 中设置一个 bool 标志以在 textview 委托中打开关闭以启用此功能),调用

  func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    if  !shouldShowKeyBoard {
        self.requestPresentationStyle(.expanded)
        return false
    }
    return true

然后在 MSMessagesAppViewController 委托中启用键盘成为第一响应者 `

 override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    if presentationStyle == .expanded {
       shouldShowKeyBoard = true
       textView.becomeFirstResponder()
    }
}

`

希望这会有所帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃 的相关文章

随机推荐

  • 单击透明 xlib 窗口

    我有一个透明的 类似水印的应用程序 它是用 C 语言的 XLib 编写的 目前 如果您单击应用程序上的任何位置 什么也不会发生 但我希望它将鼠标输入传递到其下方的任何内容 例如如果您单击 X 关闭应用程序下方的窗口 它应该关闭应用程序 而不
  • 如何避免 git-apply 更改行结尾

    我有一个 git repo 设置core eol crlf core autocrlf true and core safecrlf true 当我应用另一个补丁时crlf存储库和我的存储库中受影响文件的所有行结尾都更改为lf 目前我正在应
  • 如何用tensorflow计算AUC?

    我已经使用 Tensorflow 构建了一个二元分类器 现在我想使用 AUC 和准确性来评估分类器 就准确性而言 我可以轻松地这样做 X tf placeholder float None n input y tf placeholder
  • Git - 将推送的提交移动到新分支(重命名分支而不是强制推送?)

    还有一个问题几乎完全描述了我的情况 Git 将推送的提交移动到不同的分支 https stackoverflow com questions 9086886 git moving pushed commits to a different
  • Emacs 邪恶模式:如何创建一个新的文本对象来选择带有任何非空格字符的单词?

    我正在尝试在 Evil 中创建一个新的文本对象 例如 文本对象iw只会选择包含连字符的字符串子集 我希望新的文本对象能够将单词与任何非空格字符相匹配 到目前为止我得到的是 evil define text object evil inner
  • 正则表达式拆分 key=value

    我有一个像这样的字符串 KEY1 Value1 KE Y2 V LUE2A Value2B Key3 KEY4 V AL UE4 KEY5 Value5 我需要将其拆分以获得带有键值对的 Map 值在 应作为单个值传递 KE Y2是一个关键
  • 使用 Xamarin.iOS 获取 iOS Library 文件夹的正确方法是什么?

    这将获取我的 iOS 应用程序的文档根目录 Environment GetFolderPath Environment SpecialFolder MyDocuments 有没有类似的东西可以到达Library folder var doc
  • 静态属性未在 UI 中更新

    我花了最后一个小时试图在谷歌和 stackoverflow 中找到答案 我遵循了不同的意见和建议 但到目前为止没有任何效果 我当前的代码如下所示 public class GlobalManager ViewModelBase static
  • Oracle 中四舍五入到特定有效数字位数

    oracle 是否有舍入函数可以四舍五入到特定数量的有效数字 例如 将 1278 舍入到 1300 四舍五入到两位有效数字 Try ROUND x d FLOOR LOG 10 x 1 where d是有效位数 x是要四舍五入的值 Exam
  • /docker-entrypoint-initdb.d 文件夹中的脚本将被忽略

    我需要使用一些 SQL 命令配置 Postogres 但我放入 docker entrypoint initdb d 文件夹中的所有内容都不会被执行 我正在使用 postgres 9 6 图像 我的 Dockerfile 如下 FROM p
  • 包使用冲突:捆绑包启动时的导入包

    尝试安装 htmlunit 捆绑包时出现以下错误 com springsource com gargoylesoftware htmlunit 2 6 0 370 could not be resolved Reason Package u
  • 如何将本地不同的 Git 分支推送到 Heroku/master

    Heroku 的政策是忽略除 master 之外的所有分支 虽然我确信 Heroku 的设计者对这个政策有很好的理由 我猜测是为了存储和性能优化 但对我作为开发人员来说 结果是无论我正在研究什么本地主题分支 我都想要一种简单的方法将 Her
  • CakePHP 无法写入某些文件

    我开始使用 CakePHP 为我的框架开发一个网站 我实际上刚刚开始并且已经遇到了错误 我无法理解它们的含义 Warning cake core cache was unable to write cake dev en us to Fil
  • CSS加载后触发的jQuery事件?

    我的页面上有几个链接 在 div 允许您更改 CSS 样式表 theme selector a click function var path this attr href head link remove head append retu
  • 我可以使用 CALayer 来加速视图渲染吗?

    我正在制作一个自定义 NSView 对象 其中一些内容经常更改 而另一些内容则很少更改 事实证明 变化较少的部分需要花费最多的时间来绘制 我想做的是将这两个部分渲染在不同的层中 以便我可以分别更新其中一个或另一个 从而使我的用户免受缓慢的用
  • 未确定的泛型类型在 ghci 的运行时中如何表示

    我很清楚通用函数和通用数据类型 在泛型类型中 data SB forall x show x gt SB x instance Show SB where show SB x show x 所以对于任何给定类型x 如果它有一个签名Show
  • charindex() 最后计算白色字符,len() 在 T-SQL 中不计算

    我想找到最后一个的索引 性格 但问题是 LEFT target LEN target CHARINDEX REVERSE target 不起作用 因为目标列中的字符串末尾有很多空格字符 并且charindex函数包含空格 但是len没有 有
  • 如何对异步 API 进行单元测试?

    我已经安装了适用于 Mac 的 Google 工具箱 http code google com p google toolbox for mac 进入 Xcode 并按照说明设置单元测试发现here http code google com
  • Android NDK 链接问题

    我用 NDK 编译了 Sox 等 所以 我拥有所有 Android 友好的共享库 我制造了一个简单的测试文件 http pastebin com rniwQ7Gz它调用 sox 函数 NDK 构建告诉我 undefined referenc
  • 尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃

    下面是我在 iMessage 应用程序中的完整代码 class MessagesViewController MSMessagesAppViewController IBOutlet weak var messageView UITextV