SwiftのUITextViewでキャレットを1行上に移動する。SwiftのUITextViewでキャレットを1行上に移動する。2019-02-01SwiftのUITextViewでキャレットを1行上に移動する。Swiftこの記事は2019年02月01日に投稿しました。はじめにこんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。PWEditorで使用しているSwiftのUITextViewでキャレットを1行上に移動する方法についてです。SwiftのUITextViewでキャレットを1行上に移動するSwiftのUITextViewでキャレットを1行上に移動する方法ですが、以下のような手順になります。キャレットの現在位置を取得します。文の全行をチェックし、キャレットがどの行にあるか求めます。対象の行での位置を求めます。対象行での位置と前行の長さによりオフセット位置を求めます。対象行での位置が前行の長さより短い場合、前行で対象行での位置と同じ位置をオフセットとします。対象行での位置が前行の長さより長い場合、前行の行末位置をオフセットとします。最終行が改行の場合、最終行の1行下にキャレットがいる場合があります。その場合に1行上に移動します。キャレットをオフセット分移動します。キャレットの現在位置の取得はpaveway.hatenablog.comで紹介したメソッドを使用します。範囲が取得できない場合、終了します。テキストが取得できない場合、終了します。テキストの全文字数を取得します。characters.countは現在deprecateのためそのうち修正します。キャレットの現在位置を取得します。キャレットがどの行にあるかチェックします。enumerateLinesメソッドで取得される文字列に改行文字は含まれません。キャレットの現在位置がその範囲にあれば、その行を対象行としています。行頭位置を0に設定します。行頭位置を前行の行末位置+改行文字分に設定します。行の文字数を取得します。characters.countは現在deprecateのためそのうち修正します。行末位置を更新します。前行の長さを取得します。対象行での位置を求めます。前行が対象行より長いか短いかでオフセットを求めます。前行の同じ位置+改行文字分をオフセットとします。前行の行末位置+改行文字分をオフセットとします。前行の行頭と行末の位置を保存する。最終行が改行の場合、最終行の1行下にキャレットがいる場合があります。その場合に1行上に移動します。キャレットをオフセット分移動します。おわりにキャレットを1行上に移動する方法ですが、前行の長さを考慮しなくては目的の位置に移動できません。この部分の処理を考えるのが一番難しかった記憶があります。Kindle版この商品を含むブログを見る紹介している一部の記事のコードはGitlabで公開しています。興味のある方は覗いてみてください。目次へ私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。一緒に働きたい技術者の方も随時募集中です。興味がありましたらご連絡ください。05:31Tweet関連記事2019-06-17C#のDatePickerで表示された内容を変更する。この記事は2019年06月17日に投稿しました。C#の...2019-05-22WPFのDataGridでヘッダーをセル結合する。この記事は2019年05月22日に投稿しました。WPF...2019-01-29SwiftのUITextViewでキャレットを行末に移動する。この記事は2019年01月29日に投稿しました。Swif...2019-01-26SwiftのUITextViewでキャレットを文頭に移動する。この記事は2019年01月26日に投稿しました。Swif...2019-01-25SwiftのUITextiVewでキャレットの現在位置を取得する。この記事は2019年01月25日に投稿しました。(3)引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。