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

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

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

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

解決済

textViewがタップされた時のみViewをスクロールしたい

ttah
ttah

総合スコア35

Swift

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

2回答

0評価

0クリップ

1907閲覧

投稿2019/06/02 00:37

編集2019/06/09 03:38

現在Viewの中にtextFieldとtextViewがあります
textViewがタップされたらViewをスクロールさせたいのですが

今のコードでは1度textViewがタッチされると以降textFieldでもviewがスクロールしてしまします。
原因は

swift

func isTouch(touches: Set<UITouch>, view:UIView) -> Bool{ for touch: AnyObject in touches { let t: UITouch = touch as! UITouch if t.view?.tag == view.tag { return true } else { return false } } return false }

ここででviewがスクロールする処理が1度解除されると以降textFieldにも適用されてしまうと考えていますが対処の仕方が分からない状態です

swift

import UIKit class testViewController: UIViewController, UITextViewDelegate, UIScrollViewDelegate, UITextFieldDelegate { @IBOutlet weak var textView: UITextView! @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() textView.delegate = self textField.delegate = self textView.tag = 123 } func configureObserver() { let notification = NotificationCenter.default notification.addObserver( self, selector: #selector(self.keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil ) notification.addObserver( self, selector: #selector(self.keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil ) } // Notificationを削除 func removeObserver() { NotificationCenter.default.removeObserver(self) } // キーボードが現れたときにviewをずらす @objc func keyboardWillShow(notification: Notification?) { let rect = (notification?.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue let duration: TimeInterval? = notification?.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double UIView.animate(withDuration: duration!) { self.view.transform = CGAffineTransform(translationX: 0, y: -(rect?.size.height)!) } } // キーボードが消えたときにviewを戻す @objc func keyboardWillHide(notification: Notification?) { let duration: TimeInterval? = notification?.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? Double UIView.animate(withDuration: duration!) { self.view.transform = CGAffineTransform.identity } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if isTouch(touches: touches, view: textView) { self.configureObserver() } } func isTouch(touches: Set<UITouch>, view:UIView) -> Bool{ for touch: AnyObject in touches { let t: UITouch = touch as! UITouch if t.view?.tag == view.tag { return true } else { return false } } return false }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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