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

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

ただいまの
回答率

90.48%

  • Swift

    7484questions

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

  • Swift 2

    1334questions

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

  • Xcode 7

    615questions

    Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

  • iOS 9

    214questions

    iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift:TextViewの先頭に移動したい:iOS

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,803

ra-men

score 86

TextViewの先頭に移動したく(現在は最後尾が表示)、検索したところ以下のコードが引っかかり
実装してみましたが、最後尾が表示されており変化が見られませんでした。
関係あるかはわかりませんがEditableはfalseです。
どうすれば表示された時に先頭にスクロールしておくことができるのでしょうか?
よろしくお願い致します。

override func viewWillAppear(animated: Bool) {

        let top = NSRange(location: 0, length: 0)
        caption.scrollRangeToVisible(top)

...........


追記:ナビゲーションバーを[画面1]-[画面2(textview)]-[画面3]とつなげているのですが、上記の記述を加えると[1]→[2]の時は先頭に来ないのですが[3]→[2]の時は先頭に来ます。
また、[1]→[2]と移動し、画面左→右とドラッグすると(前の画面をチラ見?[1]には戻らず[2]に留まる)textviewが動き出し先頭に戻ることを確認しました。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

 質問修正前の回答

textView.contentOffset = CGPointMake(0, -CGFloat.max)

 質問修正後の回答(その1)

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!

    var contentOffset = CGPointZero //init
    :
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        textView.contentOffset = contentOffset //set
    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        contentOffset = textView.contentOffset //keep
    }

    override func viewDidDisappear(animated: Bool) {
        super.viewDidAppear(animated)
        contentOffset = CGPointZero //init
    }
    :
}

 質問修正後の回答(その2)

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!
    :
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.view.layoutIfNeeded()
        textView.contentOffset = CGPointZero
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 20:31

    実装してみましたが先頭にできませんでした。
    textView.contentOffset = CGPointMake(0, -CGFloat.max)をprintで出力してみたところ
    (0.0, -1.79769313486232e+308)となっております。
    現在ナビゲーションを実装していて[1]-[2]-[3] ([2]に目的のtextviewがある)という構造になっていて[3]→[2]と移動(戻る)するとシミュレーター上でtextviewが消失する事象が起きてしまいました。

    キャンセル

  • 2016/05/25 10:00

    回答を修正しました。

    キャンセル

  • 2016/05/25 13:47

    その2を追加しました。

    キャンセル

  • 2016/05/25 19:43

    その1の方で出来ました!
    ありがとうございました。
    感謝します。

    キャンセル

  • 2016/05/25 20:11

    その2の方はダメでしたか?

    キャンセル

+1

[2]番目のViewControllerと想定して最低限で書きました。
試してみてください。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textV: UITextView!
    var isDidDisappearFlg: Bool = true

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if isDidDisappearFlg  {
            isDidDisappearFlg = false
            let top = NSRange(location: 0, length: 0)
            textV.scrollRangeToVisible(top)
        }
    }

    override func viewDidDisappear(animated: Bool) {
        isDidDisappearFlg = true
    }
}

[1]→[2]の時先頭にこないというのがよくわかりませんが、初期表示なので何もtextViewにしなければ先頭になると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 20:51

    いつもありがとうございます。
    textviewはEditableはfalseなのでカーソルが合いません😢
    文面を変更いたしましたので、よろしければお願いします。

    キャンセル

  • 2016/05/24 22:17

    回答を修正しました、確認してください。
    スワイプで戻る場合も大丈夫かと思います。

    キャンセル

  • 2016/05/25 12:04 編集

    (deleted)

    キャンセル

  • 2016/05/25 12:57

    うーむ、自分の環境では問題ないのですが、他の部分で何をしているかわからないので、、、

    キャンセル

  • 2016/05/25 13:03 編集

    すみません、話がややこしくなりそうなので削除しました。

    キャンセル

  • 2016/05/25 19:44

    ありがとうございます。無事解決いたしました。

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    storyboardに配置したボタンのサイズを変更したい

    storyboardに置いたボタンのサイズを変更したいです。 そこで、CGRectMakeを使用してサイズを変更しようとしているのですがうまくいきません。 下のような書き方では

  • 解決済

    UITextViewでのPlaceholderについて

    PlaceholderLabelを宣言してTextViewに何か書いている時は非表示にしようと思っているのですが、できません。 どうすれば良いでしょうか。

  • 解決済

    swift ScaleAspectFill

    画像の表示形式について質問です。 現在ImageViewの領域いっぱいに画像を表示させたくて、 ScaleAspectFillを指定しているのですが、 画像の上側をはみ出ない

  • 解決済

    [swift]TextViewを一番下にスクロールしたい

    書籍のバーコードを読み取りtextViewに表示するアプリを作成していますが、 textViewをはみ出した場合自動で下にスクロールさせたいと思っています。 97840

  • 解決済

    TextViewに枠を付ける方法

    TextViewに枠線を付ける方法をネットで探してみて、古い情報しか出てこなかったので、教えて頂けたら嬉しいです。 <QuartzCore/QuartzCore.h> という

  • 解決済

    textViewのPlaceHolderの実装にてついて

    前提・実現したいこと ひとつのViewControllerに2つのtextViewを設置し、それぞれにPlaceHolderを追加したい。 発生している問題・エラーメッセー

  • 解決済

    UITextViewのリンク時のタップイベント

    UITextView上のリンクをタップした時にSFSafariViewControllerで開きたいので import UIKit import SafariServices

  • 受付中

    TextView のリンクカスタマイズ

    TwitterのようにハッシュタグをUITextViewでリンク化したいのでこのページを参考に、 https://stackoverflow.com/questions/34294

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

  • Swift

    7484questions

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

  • Swift 2

    1334questions

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

  • Xcode 7

    615questions

    Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

  • iOS 9

    214questions

    iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。