UIAlertControllerのTextField変更をPublisherで監視
UIAlertControllerのテキストフィールド監視は、調べるとDelegateやNotificationなどのいくつかの方法での解決方法が出てきますが、この実装はCombineフレームワークのPublisherを利用したものです。
実装
実装は簡単です。ViewControllerの宣言部でCombineフレームワークのimportを宣言し、プライベート変数としてcancellablesを初期化します。
import Combine
class ViewController : UIViewController {
private var cancellables: Set<AnyCancellable> = .init()
(...)
}
そしてAlertControllerの利用部分で以下のバインディングを宣言します。
alertController.addTextField { [weak self] (textField) in
guard let self = self else { return }
textField.placeholder = "placeholder"
textField.text = "initialText"
NotificationCenter.default.publisher(for: UITextField.textDidChangeNotification, object: textField)
.receive(on: DispatchQueue.main)
.compactMap({ $0.object as? UITextField })
.map({ $0.text?.isEmpty ?? true })
.sink(receiveValue: { isEmpty in
saveAction.isEnabled = !isEmpty // たとえば保存ボタンのenable切り替えなど
})
.store(in: &self.cancellables)
}
Author And Source
この問題について(UIAlertControllerのTextField変更をPublisherで監視), 我々は、より多くの情報をここで見つけました https://qiita.com/yosshi4486/items/75ad5c32784c7c9fbd92著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .