Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 试图从键盘后面取消隐藏UITextView_Xcode_Swift - Fatal编程技术网

Xcode 试图从键盘后面取消隐藏UITextView

Xcode 试图从键盘后面取消隐藏UITextView,xcode,swift,Xcode,Swift,我正在使用下面的代码取消隐藏UITextFields。在我尝试取消隐藏UITextView之前,它工作得非常好。它会崩溃,错误是试图打开一个nil值。我的问题是,我需要实现什么才能使UITextView像UITextFields一样取消隐藏?或者我是否需要使用UITextView旁边的内容来允许段落样式输入 class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField1: UI

我正在使用下面的代码取消隐藏UITextFields。在我尝试取消隐藏UITextView之前,它工作得非常好。它会崩溃,错误是试图打开一个nil值。我的问题是,我需要实现什么才能使UITextView像UITextFields一样取消隐藏?或者我是否需要使用UITextView旁边的内容来允许段落样式输入

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时,其类型不同。