質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

1856閲覧

swift 計算エラー

hirotoshin

総合スコア24

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/10/14 07:39

編集2016/10/14 08:11

質問失礼します。
テキストビューをキーボードの上にずらすというプログラムを書いたのですが、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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/10/14 07:44

どういうエラーが出るのでしょうか?
guest

回答2

0

ベストアンサー

"テキストフィールドのときはうまく行ったのですが、テキストビューにした途端このエラーが吐かれました。"
とありますが、
//textFieldを編集する際に行われる処理(現在はtextViewを編集する際に行われる処理ですよね?)
のメソッド名がtextFieldShouldBeginEditingのままなのが原因ではないでしょうか?
恐らくtxtActiveViewがnilになっているのかと。
テキストビューの場合はtextViewShouldBeginEditingではないのかなと。

投稿2016/10/16 02:39

164_M

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

UITextFieldDelegateを実装していないのが原因です。
UITextViewDelegateとゴチャゴチャになっていないでしょうか?

投稿2016/10/14 08:30

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問