自定义输入附件视图通知

Posted

技术标签:

【中文标题】自定义输入附件视图通知【英文标题】: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)
    

【问题讨论】:

【参考方案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)

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

【讨论】:

以上是关于自定义输入附件视图通知的主要内容,如果未能解决你的问题,请参考以下文章

更改 uitableviewcell 中的自定义附件视图?

UITableView 原型单元上的自定义附件视图未触发

在 UITableViewCell 的附件视图中使用自定义按钮的问题

为 UITableViewCell 的附件视图使用自定义图像并让它响应 UITableViewDelegate

iOS 键盘扩展 - 向标准键盘添加按钮(系统范围的输入附件视图)

如何在通知内容扩展中为我的自定义视图应用自定义字体/颜色和半透明背景?