您的位置:首页 > 产品设计 > UI/UE

15.使用UIScrollView实现键盘自适应

2015-12-21 18:28 459 查看
在前面, 我们实现过一个在ViewController里的键盘自适应, 现在让我们来看看在UIScrollView是怎么实现键盘自适应的.

PS: 已经更新到Swift 2.0, 支持Xcode7, iOS9

1.界面布局



2.实现代码

关联控件

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textFieldOne: UITextField!
@IBOutlet weak var textFieldTwo: UITextField!
@IBOutlet weak var textFieldThree: UITextField!
@IBOutlet weak var textFieldFor: UITextField!
@IBOutlet weak var textFieldFive: UITextField!
@IBOutlet weak var myScrollView: UIScrollView!
}


设置NSNotificationCenter

override func viewDidLoad() {
super.viewDidLoad()

// 3.实现UITextField代理
textFieldOne.delegate = self
textFieldTwo.delegate = self
textFieldThree.delegate = self
textFieldFor.delegate = self
textFieldFive.delegate = self

// 4.自定义NSNotifacationCenter
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}

// 5.自定义当键盘出现时的方法, 参数为NSNotification
func keyboardWillShow(notification: NSNotification) {
adjustingHeight(true, notification: notification)
}

// 6.自定义当键盘消失时的方法, 参数为NSNotification
func keyboardWillHide(notification: NSNotification) {
adjustingHeight(false, notification: notification)
}

// 7.自定义自适应高度方法
func adjustingHeight(show: Bool, notification: NSNotification) {
// 7.1获取userInfo
let userInfo = notification.userInfo!

// 7.2获取键盘的Frame
let keyboardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()

// 7.3获取显示键盘和消失键盘的高度
let changeInHeight = (CGRectGetHeight(keyboardFrame) + 5) * (show ? 1 : -1)

// 7.4设置向下偏移量
myScrollView.contentInset.bottom += changeInHeight

// 7.5设置向下添加偏移量
myScrollView.scrollIndicatorInsets.bottom += changeInHeight
}


实现UITextField的代理方法

// 8.UITextField代理方法, 当点击return键时, 就执行
func textFieldShouldReturn(textField: UITextField) -> Bool {
// 8.1self.view取消编辑状态
self.view.endEditing(true)

// 8.2返回true
return true
}


3.最终效果



好了, 这次就讲到这里, 下次我们继续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息