テキストブロックをUITextViewに貼り付けるときに発生するイベントはありますか?テキストが貼り付けられたときにtextViewのフレームを変更する必要があります。テキストがUITextViewにペーストされたときを知る方法
ありがとうございます。デリゲートが設定されている場合
テキストブロックをUITextViewに貼り付けるときに発生するイベントはありますか?テキストが貼り付けられたときにtextViewのフレームを変更する必要があります。テキストがUITextViewにペーストされたときを知る方法
ありがとうございます。デリゲートが設定されている場合
あなたのUITextViewは、そのUITextViewDelegate方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
を呼び出します。これは、キーボードで文字が入力されたときと、テキストがテキストビューに貼り付けられたときの両方で呼び出されます。貼り付けられたテキストはreplacementText引数です。
// Set this class to be the delegate of the UITextView. Now when a user will paste a text in that textview, this delegate will be called.
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
// Here we check if the replacement text is equal to the string we are currently holding in the paste board
if ([text isEqualToString:[UIPasteboard generalPasteboard].string]) {
// code to execute in case user is using paste
} else {
// code to execute other wise
}
return YES;
}
私は[UIPasteboard generalPasteboard] .string]のような要件が20文字以上です。私はちょうど最初の20文字だけを置き換えたいので、ここではshouldChangeメソッドのテキストが既にすべてコピーされています。最初の20文字まで変更してください。私はスイープで作業しているので、パラメータ/文字列の値を変更することはできません。誰も私にこれを助けることができますか?ありがとう - –
iはUITextViewでペーストイベントを検出するために使用するものです参照してください。こうすることで、ユーザーがUIPasteboardにない他のタイプのテキストの後にテキストビューでペーストするときを検出します。
これはコードです:あなたはペーストボードに長文を持っている場合if string == UIPasteboard.general.string
でペーストボードの文字列をチェック
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
// Here we check if the replacement text is equal to the string we are currently holding in the paste board
if ([text containsString:[UIPasteboard generalPasteboard].string]) {
// code to execute in case user is using paste
} else {
// code to execute other wise
}
return YES;
}
クールなソリューション、それは私のために働いた。ありがとうございました! –
私は[UIPasteboard generalPasteboard] .string]のような要件が20文字以上です。私はちょうど最初の20文字だけを置き換えたいので、ここではshouldChangeメソッドのテキストはすでにすべてコピーされています。私はchouldをtrueに変更し、最初の20文字。私はスイープで作業しているので、パラメータ/文字列の値を変更することはできません。誰も私にこれを助けることができますか?お返事ありがとうございます –
carlos16196は良い方法でしたが、私はまた、[text isEqualToString:[UIPasteboard generalPasteboard].string]
[text containsString:[UIPasteboard generalPasteboard].string]
へ
を変更することで、それを微調整します:
投稿コードに記載されている変更を忘れた –
ありがとうございました。 – danielrosero
私は[UIPasteboard generalPasteboard]のような要件を持っています。文字列]は20文字以上です私はちょうど最初の20文字だけを置き換えたいので、ここではshouldChangeメソッドのテキストはすでにすべてコピーされています。私はchouldをtrueに変更し、最初の20文字まで変更したいと思います。私はスイープで作業しているので、パラメータ/文字列の値を変更することはできません。誰も私にこれを助けることができますか?ありがとう - –
は数秒かかります。ユーザーは、このチェック中にキーパッドがフリーズしていると見なします。 私の解決策は、新しい文字の長さが1よりも長いかどうかを確認することです。 1より長い場合、文字列はペーストボードからのものです。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.characters.count > 1{
//User did copy & paste
}else{
//User did input by keypad
}
return true
}
技術的には、ユーザーがペーストボードから1文字を貼り付けていた(なぜなぜですか?)か、文字を入力した場合は検出されませんでしたが、すべての目的と目的のためにジョブが実行されます。それは私が使用しようとしているものです。 –
サブタイトルを試してみて、この関数をオーバーライドしてください。 SWIFT 4では
public override func paste(_ sender: Any?)
:
func textViewDidChange(_ textView: UITextView) {
if(textView.text == UIPasteboard.general.string)
{
//Text pasted
}
}
私はちょうどだからここshouldChangeメソッドテキストでは、20文字のみ最初に置き換えたい] 20個の以上の文字を.string [UIPasteboard generalPasteboard]のような要件をされていすでにすべてのコピーが付属しています。私はchouldをtrueに変更し、最初の20文字まで変更したいと思います。私はスイープで作業しているので、パラメータ/文字列の値を変更することはできません。誰も私にこれを助けることができますか?ありがとう - –