質問失礼します。
テキストビューをキーボードの上にずらすというプログラムを書いたのですが、let txtLimit = txtActiveView.frame.origin.y + txtActiveView.frame.height + 8.0の場所でEXC_BAD_INSTRUCTION (code=EXC_i386_INVOP, subcode=0x0)というエラーが出てしまいます。
計算のミスだということはわかるのですが、どうしたらよいかよくわかりません。
テキストフィールドのときはうまく行ったのですが、テキストビューにした途端このエラーが吐かれました。
教えていただけたら幸いです。
よろしくお願いします。
swift
1import UIKit 2 3class ViewController: UIViewController, UITextViewDelegate { 4 5 @IBOutlet weak var scroll: UIScrollView! 6 @IBOutlet weak var text1: UITextField! 7 @IBOutlet weak var text2: UITextField! 8 @IBOutlet weak var text3: UITextView! 9 @IBOutlet weak var text4: UITextView! 10 11 var txtActiveView: UITextView!//編集後のtextFieldを新しく格納する変数を定義 12 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 // Do any additional setup after loading the view, typically from a nib. 18 text3.delegate = self 19 text4.delegate = self//デリゲート設定(このdelegateは画面もしくはreturnをタップした時にキーボードを閉じる処理を扱うのに必要なもので、NSNotificationCenterを使うために必要としているものではない。) 20 // Do any additional setup after loading the view, typically from a nib. 21 } 22 // Viewが画面に表示される度に呼ばれるメソッド 23 override func viewWillAppear(animated: Bool) { 24 // NSNotificationCenterへの登録処理 25 let notificationCenter = NSNotificationCenter.defaultCenter() 26 notificationCenter.addObserver(self, selector: "handleKeyboardWillShowNotification:", name: UIKeyboardWillShowNotification, object: nil) 27 notificationCenter.addObserver(self, selector: "handleKeyboardWillHideNotification:", name: UIKeyboardWillHideNotification, object: nil) 28 } 29 // Viewが非表示になるたびに呼び出されるメソッド 30 override func viewDidDisappear(animated: Bool) { 31 super.viewDidDisappear(animated) 32 33 // NSNotificationCenterの解除処理 34 let notificationCenter = NSNotificationCenter.defaultCenter() 35 notificationCenter.removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) 36 notificationCenter.removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) 37 } 38 //画面がタップされた際にキーボードを閉じる処理 39 func tapGesture(sender: UITapGestureRecognizer) { 40 text3.resignFirstResponder() 41 text4.resignFirstResponder() 42 43 } 44 //キーボードのreturnが押された際にキーボードを閉じる処理 45 func textFieldShouldReturn(textView: UITextView) -> Bool { 46 text3.resignFirstResponder() 47 text4.resignFirstResponder() 48 // itemMemo.resignFirstResponder() 49 return true 50 } 51 //textFieldを編集する際に行われる処理 52 func textFieldShouldBeginEditing(textView: UITextView) -> Bool { 53 txtActiveView = textView // 編集しているtextFieldを新しいtextField型の変数に代入する 54 return true 55 } 56 57 //キーボードが表示された時 58 func handleKeyboardWillShowNotification(notification: NSNotification) { 59 //郵便入れみたいなもの 60 let userInfo = notification.userInfo! 61 //キーボードの大きさを取得 62 let keyboardRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 63 // 画面のサイズを取得 64 let myBoundSize: CGSize = UIScreen.mainScreen().bounds.size 65 // ViewControllerを基準にtextFieldの下辺までの距離を取得 66 let txtLimit = txtActiveView.frame.origin.y + txtActiveView.frame.height + 8.0 67 // ViewControllerの高さからキーボードの高さを引いた差分を取得 68 let kbdLimit = myBoundSize.height - keyboardRect.size.height 69 70 // こうすることで高さを確認できる(なくてもいい) 71 print("テキストフィールドの下辺:(\(txtLimit))") 72 print("キーボードの上辺:(\(kbdLimit))") 73 74 //スクロールビューの移動距離設定 75 if txtLimit >= kbdLimit { 76 scroll.contentOffset.y = txtLimit - kbdLimit 77 } 78 } 79 80 //ずらした分を戻す処理 81 func handleKeyboardWillHideNotification(notification: NSNotification) { 82 scroll.contentOffset.y = 0 83 } 84}
回答2件
あなたの回答
tips
プレビュー