初投稿です。
Swiftを学び始めてまだ間もないので間違ってることもあるかもしれません。間違いがあれば教えてもらえると幸いですm(_ _)m
#経緯
iOSで気になるライブラリ Swift編で紹介されているのを見て導入したのですが、TextFieldをおいた時にキーボードでボタンが隠れてしまったので、キーボード表示時に重なったら上にずらす処理を書いてみました。
#SCLAlertViewとは
SCLAlertViewはFlatなデザインのAlertViewです。
詳しくは->https://github.com/vikmeup/SCLAlertView-Swift
#コード
SCLAlertView.swiftのinitに以下の文を挿入します。
public class SCLAlertView: UIViewController {
required override public init() {
super.init()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
...
}
...
}
initでNSNotificationCenter.defaultCenter().addObserverを使うことでキーボードの表示時にkeyboardWillShowが、非表示時にkeyboardWillHideが呼ばれるようになります。あとはSCLAlertViewクラス内に関数の中身を書いてあげましょう。
public class SCLAlertView: UIViewController {
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
let viewBottom = UIScreen.mainScreen().bounds.size.height - (self.baseView.center.y + kWindowHeight/2)
let hideHeight = keyboardSize.height - viewBottom + 10
if hideHeight > 0 {
UIView.animateWithDuration(0.2, animations: {
self.baseView.center.y -= hideHeight
})
}
}
}
func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
if UIScreen.mainScreen().bounds.size.height/2 != self.baseView.center.y {
UIView.animateWithDuration(0.2, animations: {
self.baseView.center.y = UIScreen.mainScreen().bounds.size.height/2
})
}
}
}
...
}
これでキーボードの高さに合わせてSCLAlertViewが移動するようになります。
#参考サイト
【iOS】LINE風チャットUIを実装〜メッセージ入力欄編〜(http://qiita.com/Kaiketch/items/1d0cc3f7bc3aa4d4161a)
SwiftでNSNotificationを利用してクラス間の処理を連携する(http://qiita.com/taka000826/items/2460869a01766fdd221a)
Move textfield when keyboard appears swift(http://stackoverflow.com/questions/25693130/move-textfield-when-keyboard-appears-swift)