6

の切り取り/コピー/貼り付けの動作を変更しようとすると、かなりの問題が発生しUITextViewます。私が達成したいのは、ユーザーがテキストを に貼り付けたことを検出することですUITextView。これを検出したら、データをチェックして自分のことをします。

文書によると、私は について知りましたUIResponder

そこで、 を継承する簡単なクラスを作成しましたUITextView。.m ファイルで、呼び出される 1 つの関数を作成します。

-(void) paste:(id)sender{
  NSLog(@"paste button was pressed do something");
}

しかし、なぜか発火しないようです。selectステートメントの動作とトレースデータを取得できました。

-(void) select:(id)sender

1.これは、UITextView で貼り付けを検出する正しい方法ですか? 2. 現在、UITextView が変更された文字数を追跡しています。1 文字より大きい場合は、貼り付け操作であると思われます。しかし、iPhone は Wedn (goes to Monday) などの単語をオートコンプリートできるため、貼り付け操作ではない可能性があります。

Interface Builder で、NIB ファイルで textView を選択し、その「クラス ID」を以前に作成したクラスに選択しました。このファイルがサブクラスとして機能していることはわかっていますが、Paste イベントには応答しません。

ありがとう。

4

4 に答える 4

3

私にも同じことが起こります。Select(および場合によってはコピー)が呼び出されますが、貼り付けは行われません。

textViewDidChangeを使用して動作をシミュレートしました。ここでは、現在のテキストと前のテキストの違いを常に確認しています。異なる文字が多く、text.lengthが貼り付けられているはずの長さよりも大きい場合。

Appleがこれを修正することを願っています。

于 2009-07-26T11:48:06.107 に答える
3

UITextView には、切り取り、コピー、貼り付けを処理するビューがあります。UIWebDocumentView です。したがって、UITextView が最初のレスポンダーである場合、実装ではなく UIWebDocumentView が最初にそれを取得します。これらの関数を上書きしたいので、これは非常にイライラします。

于 2009-07-15T13:54:51.257 に答える
1

はい、上記の貼り付けコードは、ここで参照しているAppleのドキュメントによると正しいです。

- (void)paste:(id)sender

間違ったファイルに実装しているのではないかと思います。1番目のレスポンダーチェーンの一部であるファイルに実装する必要があります。UITextViewをサブクラス化しましたか、それともViewControllerでバニラを使用していますか?

うーん、問題は、デリゲートメソッドが機能するために、UITextViewサブクラスをデリゲートにする必要があるかもしれないということだと思います。これは、見た目ではないためです。私は以前にそれをどのようにしたかを見つけようとします。

わかったと思います。サブクラス化されたUITextFieldクラスでこれを行う必要があると思います。

@interface mySpecialTextFieldClass : NSObject <UITextFieldDelegate>
{

}

それを最後に追加するとうまくいくはずです、試してみてください!それが行うことは、あなたのサブクラスを、デリゲートが通知を送信できるタイプのオブジェクトにすることです...誰かがここで私を修正したくない限り、それはポリモーフィズムです:)

ジョンを試す最後の1つは、UITextViewへのIBOutletを含むViewControllerで、UITextViewのインスタンスでこのメソッドを呼び出してみてください。

[myUITextView setDelegate:self];

そこに完全にランダムなものを投げるだけで、ファーストレスポンダーになるように設定してみてください。

[myUITextView becomeFirstResponder];

これは、暗い子供たちのプログラミングと呼ばれています!そして、プログラミングするのは非常に悪い方法ですが、私はそれを行うことを認めます、そして時々それは報われる:Plol。

于 2009-07-14T06:04:06.907 に答える