実現したいこと
undo redoをまとめて戻したりしたい
前提
undo redo自体は機能しますが、一文字ずつしか前後できません。
発生している問題・エラーメッセージ
エラーメッセージなし 一文字ずつしか前後しない
該当のソースコード
SwiftUI
1 2swift ui undo 3 4 5import SwiftUI 6 7@main 8struct TestApp: App { 9 var body: some Scene { 10 WindowGroup { 11 ContentView() 12 } 13 } 14} 15struct ContentView: View { 16 var body: some View { 17 TextEditorView() 18 } 19} 20struct TextEditorView: View { 21 @State private var fullText: String = "" 22 @State private var undoText: [Character] = [] 23 24 var body: some View { 25 VStack { 26 HStack { 27 Button(action: undoType) {Image(systemName:"arrow.uturn.backward")} 28 Button(action: redoType) {Image(systemName:"arrow.uturn.forward")} 29 } 30 TextEditor(text: $fullText) 31 } 32 } 33 34 func undoType(){ 35 if let lastChar = fullText.last { 36 undoText.append(lastChar) 37 fullText = String(fullText.dropLast()) 38 } 39 } 40 func redoType(){ 41 if let lastChar = undoText.last { 42 undoText.removeLast() 43 fullText.append(lastChar) 44 } 45 } 46} 47
試したこと
Timer()かと思い、セットしましたが、関係ありませんでした。
補足情報(FW/ツールのバージョンなど)
Xcode14.1
Swift はいつの間に .NET Core を使うようになったんでしょうか?
ちょうど修正しました
了解しました。
`var undoText: [Character]`
ですので、一文字ずつになってしまいますね。
> Timer()かと思い、セットしましたが、関係ありませんでした。
こちらは具体的な動作のイメージとしてはどのようになってもらいたいのでしょうか?
2秒入力がなかったら、それまでの入力をまとめて扱いたい、とかで良いのでしょうか?
---
現在のコードは一文字ずつ戻る、やり直しができると思いますが、
次のような操作の場合に不自然に感じましたが、いかがでしょうか?
「qr」と入力する、
1文字戻す(「q」になる)、
「p」と入力する(「qp」になる)、
一文字やり直しする(「qpr」になる) <- やり直しができること自体不自然?
キーボードから入力があったら、
やり直しのボタンがクリアされた方が良いのかなと思いますが、
いかがでしょうか?
このあたりの仕組みにつきまして、
Swift標準のクラスが存在します。
こちらも検討してみると良いのかなと思いました。
[UndoManager | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/undomanager)
ありがとうございます
2秒入力がなかったら、それまでの入力をまとめて扱いたい、とかで良いのでしょうか?
そうです
Google Keepのundo redoのようなものだとおもってください
その秒数のために、Timer()かと思いました。
Appleのデフォルトもありがとうございます
見てみます
これは獣パンツという荒らしで、何度も凍結されている常習犯です。
ご報告ありがとうございます
わたしがタグを付けまちがえてしまったのがわるいのですが、
そのはなしは先ほどおわりましたし、
それ以上、それ以外は、介入される必要はないかとおもいます
荒らしかどうかはみればわかります
KEMONO_PANTSU_k の話です。
これを見て荒らしではないとわかると思っているとすれば、それは自分を過信しすぎています。
こいつの質問や回答は運営によってほぼ消されていますが、その中で残っているマシなもののひとつが次の質問です。
https://teratail.com/questions/fizi27evdmoegr
ありがとうございます
わたしはプログラマーでもありますが、それ以外の仕事もしています
そのなかで
このような振舞いはかわいいほうですし、
現に いまのアカウントは消されておらず、
多くのかたのためにレクチャーしています
その一部分しか切りとらず、わたしには荒らしというわけにはいきません
一部しか残ってないんですよ。
まあいいや。
お好きに信じてどうぞ。
わたしもいそがしいので
あとは運営の方におねがいしてください
しません。あなたたちが騙されるのを笑って見ていることにします。
ありがとうございます
回答1件
あなたの回答
tips
プレビュー