このコードをSwift 3:に更新しようとしています。
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)`
これまでのところ、コンパイラーによって与えられた自動修正を試しました。これにより、次のようなコードが生成されます。
let notificationCenter = NotificationCenter.default()
notificationCenter.addObserver(self, selector: Selector(("keyboardWillShow:")), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
notificationCenter.addObserver(self, selector: Selector(("keyboardWillHide:")), name: NSNotification.Name.UIKeyboardWillHide, object: nil)`
残念ながら、それは私を遠くに連れて行かず、追加のエラーをもたらします。
誰もこれを解決しましたか?
通知の書き方を試しているだけです。私は(まだ)通知機能を修正しようとはしていません。
Swift 4
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
print("keyboardWillShow")
}
func keyboardWillHide(notification: NSNotification){
print("keyboardWillHide")
}
これらのメソッド内の以下のコードを使用してキーボード情報を取得することもできます。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: .UIKeyboardWillChangeFrame, object: nil) .
@objc func keyboardWillChange(notification: NSNotification) {
let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double
let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt
let curFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let targetFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let deltaY = targetFrame.Origin.y - curFrame.Origin.y
}
Swift 4.2 Xcode 10(10L213o)
Swift 3と比較した主な変更点は、UIWindow.keyboardWillShowNotification
およびUIWindow.keyboardWillHideNotification
let notifier = NotificationCenter.default
notifier.addObserver(self,
selector: #selector(KeyboardLayoutConstraint.keyboardWillShowNotification(_:)),
name: UIWindow.keyboardWillShowNotification,
object: nil)
notifier.addObserver(self,
selector: #selector(KeyboardLayoutConstraint.keyboardWillHideNotification(_:)),
name: UIWindow.keyboardWillHideNotification,
object: nil)
@objc
func keyboardWillShowNotification(_ notification: NSNotification) {}
@objc
func keyboardWillHideNotification(_ notification: NSNotification) {}
このようなコードを書くことでこの問題を修正しました
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
Swift 4.2 .UIKeyboardWillShow
はUIResponder.keyboardWillShowNotification
に名前が変更され、.UIKeyboardWillHide
はUIResponder.keyboardWillHideNotification
に名前が変更されました]
NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillShowNotification , object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillHideNotification , object: nil)
@objc func NameOfSelector() {
//Actions when notification is received
}
非推奨の文字列リテラルSelector
を型チェック済みの#selector(Class.method)
ペアに置き換えることができます。
let center = NotificationCenter.default
center.addObserver(self,
selector: #selector(keyboardWillShow(_:)),
name: .UIKeyboardWillShow,
object: nil)
center.addObserver(self,
selector: #selector(keyboardWillHide(_:)),
name: .UIKeyboardWillHide,
object: nil)
Swift=は指定されたメソッドが実際に存在することをコンパイル時にチェックできるため、#selector
構文ははるかに安全です。
Swiftセレクターの詳細については、 ricksterの詳細な回答 を参照してください。
In Swift 3.
override func viewDidLoad()
{
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
キーボードの表示と非表示
func keyboardWillShow(notification: NSNotification)
{
// Your Code Here
}
func keyboardWillHide(notification: NSNotification)
{
//Your Code Here
}
NotificationCenter.default.addObserver(self, selector: Selector(("keyboardWillShow:")), name:UIResponder.keyboardWillShowNotification, object: nil);
NotificationCenter.default.addObserver(self, selector: Selector(("keyboardWillHide:")), name:UIResponder.keyboardWillHideNotification, object: nil);
それぞれSwift=の両方のバージョンでキーボード通知を実行できます。
Objserverを追加します。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardWillShow, object: nil)
関数を呼び出すSwift 3
func keyboardDidShow() {
print("keyboardDidShow")
}
関数呼び出しSwift 4
@objc func keyboardDidShow() {
print("keyboardDidShow")
}
https://stackoverflow.com/a/57430207/2885792 をご覧ください。 UITextFieldに関連していて、オブザーバーを正しく追加および削除した後でも解決できない場合。