Xcode 试图从键盘后面取消隐藏UITextView
我正在使用下面的代码取消隐藏UITextFields。在我尝试取消隐藏UITextView之前,它工作得非常好。它会崩溃,错误是试图打开一个nil值。我的问题是,我需要实现什么才能使UITextView像UITextFields一样取消隐藏?或者我是否需要使用UITextView旁边的内容来允许段落样式输入Xcode 试图从键盘后面取消隐藏UITextView,xcode,swift,Xcode,Swift,我正在使用下面的代码取消隐藏UITextFields。在我尝试取消隐藏UITextView之前,它工作得非常好。它会崩溃,错误是试图打开一个nil值。我的问题是,我需要实现什么才能使UITextView像UITextFields一样取消隐藏?或者我是否需要使用UITextView旁边的内容来允许段落样式输入 class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField1: UI
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var notesInput: UITextView!
@IBOutlet weak var scrollView: UIScrollView!
var activeTextField: UITextField!
// MARK: - View
override func viewDidLoad() {
super.viewDidLoad()
self.textField1.delegate = self
self.textField2.delegate = self
// self.textField3.delegate = self
// self.textField4.delegate = self
// self.textField5.delegate = self
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.registerForKeyboardNotifications()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.unregisterFromKeyboardNotifications()
}
// MARK: - Keyboard
// Call this method somewhere in your view controller setup code.
func registerForKeyboardNotifications() {
let center: NSNotificationCenter = NSNotificationCenter.defaultCenter()
center.addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil)
center.addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)
}
func unregisterFromKeyboardNotifications () {
let center: NSNotificationCenter = NSNotificationCenter.defaultCenter()
center.removeObserver(self, name: UIKeyboardDidShowNotification, object: nil)
center.removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}
// Called when the UIKeyboardDidShowNotification is sent.
func keyboardWasShown (notification: NSNotification) {
let info : NSDictionary = notification.userInfo!
let kbSize = (info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue() as CGRect!).size
let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your app might not need or want this behavior.
var aRect = self.view.frame
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, self.activeTextField.frame.origin) ) {
self.scrollView.scrollRectToVisible(self.activeTextField.frame, animated: true)
}
}
// Called when the UIKeyboardWillHideNotification is sent
func keyboardWillBeHidden (notification: NSNotification) {
let contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
// MARK: - Text Field
func textFieldDidBeginEditing(textField: UITextField) {
self.activeTextField = textField
}
func textFieldDidEndEditing(textField: UITextField) {
self.activeTextField = nil
}
首先实现UITextViewDelegate。还请将键盘的代码显示出来,键盘将隐藏,textFieldDidBeginEditing,textViewDidBeginEditing。@Nimishappel UITextViewDelegate的实现修复了我的原始错误。但是我在为if行展开可选值时意外地得到了一个find nil!CGRectContainesPointRect,self.activeTextField.frame.origin{self.scrollView.scrollRectToVisibleself.activeTextField.frame,动画:True这是因为activeTextField的类型为UITextField。这对所有UITextField都非常有效,但使用UITextView时,其类型不同。