0
我正在使用「編程iOS 8」中的以下代碼。我有一個包含簡單文本字段的約束子視圖。這種觀點對於超級觀點的限制來說是最重要的,也是最重要的。我也有一個子視圖的插座。這裏的目標是當鍵盤出現時,它將推動這個子視圖。我在「let f = self.fr!.frame」一行中得到一個錯誤:線程1:EXC_BAD_INSTRUCTION。它是否需要解開可選項?這可能是我的限制問題嗎?任何幫助將非常感激。謝謝。當鍵盤出現約束時Swift-Move查看
import UIKit
class ViewController: UIViewController {
@IBOutlet var topSpace: NSLayoutConstraint!
@IBOutlet var bottomSpace: NSLayoutConstraint!
@IBOutlet var slidingView: UIView!
var fr: UIView?
override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(
self, selector: "keyboardShow:",
name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(
self, selector: "keyboardHide:",
name: UIKeyboardWillHideNotification, object: nil)
super.viewDidLoad()
}
func textFieldDidBeginEditing(tf: UITextField) {
self.fr = tf // keep track of the first responder
}
func textFieldShouldReturn(tf: UITextField) -> Bool {
tf.resignFirstResponder()
self.fr = nil
return true
}
func keyboardShow(n:NSNotification) {
let d = n.userInfo!
var r = (d[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
r = self.slidingView.convertRect(r, fromView:nil)
let f = self.fr!.frame
let y : CGFloat =
f.maxY + r.size.height - self.slidingView.bounds.height + 5
if r.origin.y < f.maxY {
self.topSpace.constant = -y
self.bottomSpace.constant = y
self.view.layoutIfNeeded()
}
}
func keyboardHide(n:NSNotification){
self.topSpace.constant = 0
self.bottomSpace.constant = 0
self.view.layoutIfNeeded()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我仍然試圖理解上面的代碼,我在書中找到了這些代碼。我很抱歉,如果這是一個簡單的修復。當我觸摸文本框時會出現此錯誤。鍵盤不顯示,這是控制檯中的錯誤:致命錯誤:意外地發現零,同時展開一個可選值 –
我設置了tf作爲我的文本字段的出口。 –