2

Advanced Notification Session 708 WWDC 2016の最後。彼らは同時にテキスト入力&アクションを取ることについて話しました。カスタム入力アクセサリビュー通知

WWDCセッションの24分のマークあなたが招待&を受け入れるか、または同時に招待辞退パーティーにコメントを取る708

でスタート。私はそれを試みたが、非常に失敗している。

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) 
    } 
} 

}あなたの問題があるまさにわからない

答えて

2

が、私は最近、同様の課題に直面した - と私は正常に呼ば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) 
} 

これはあなたが私に知らせて助けていない場合:)

関連する問題