【问题标题】:Custom input accessory view Notification自定义输入附件视图通知
【发布时间】:2016-12-18 13:47:47
【问题描述】:

Advanced Notification Session 708 WWDC 2016 的末尾。他们谈到了同时进行文本输入和操作。

从 WWDC 会话 708 的 24 分钟开始。

您对派对邀请发表评论并同时接受或拒绝邀请。我试图这样做,但非常不成功。

class NotificationViewController: UIViewController, UNNotificationContentExtension {

var textField = UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 10))

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any required interface initialization here.
}

override var canBecomeFirstResponder: Bool {

    return true
}

override var inputAccessoryView: UIView? {

    let customView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 40))

    customView.backgroundColor = UIColor.red

    textField.placeholder = "Type Comment here"

    textField.textColor = UIColor.black

    customView.addSubview(textField)

    print(customView)

    return customView
}

func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {

       if response.actionIdentifier == "comment" {

        becomeFirstResponder()

        textField.becomeFirstResponder()

        print("Its working")

        if let textResponse = response as? UNTextInputNotificationResponse {

            print(textResponse.userText)

            completion(UNNotificationContentExtensionResponseOption.doNotDismiss)
        }

        completion(UNNotificationContentExtensionResponseOption.doNotDismiss)
    }
}

}

【问题讨论】:

    标签: uitextfield swift3 xcode8 inputaccessoryview unusernotificationcenter


    【解决方案1】:

    不确定您的问题究竟是什么,但我最近遇到了类似的任务 - 我已经成功实施了您提到的 WWDC 演讲中的解决方案。
    我的问题是我不知道在使用自定义inputAccessoryView 时如何关闭通知。我的解决方案是保存completionHandler,然后在我的自定义inputAccessoryView 中的特定按钮被点击时调用它。

    首先;创建函数变量来存储completionHandler:

    var savedCompletionBlock:(UNNotificationContentExtensionResponseOption) -> Void = { (UNNotificationContentExtensionResponseOption) in }
    

    然后;在func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void)保存完成块:

    savedCompletionBlock = completion
    

    最后;在需要的任何地方调用它(例如单击按钮):

    func confirmPressed() {
       savedCompletionBlock(.dismiss)
    }
    

    如果这对您没有帮助,请告诉我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多