iPhone uitextViewは、テキストビューが編集可能な場合、データ検出器をサポートしません

StackOverflow https://stackoverflow.com/questions/2097340

質問

ビルド時に興味深い警告(iPhoneシミュレーター)が表示されます。

EditView.xib:35:0 UITextView does not support data detectors when the text view is editable.

これは基本的にGoogleに存在していないので、削除したいと思います。

私のeditview.xibには、メモを書くテキストビューがあります。必要な情報はありますか?

役に立ちましたか?

解決

私もこの警告を見ていました。これが私がそれを修正した方法です:

インターフェイスビルダーのXIBファイルで、テキストビューを選択し、属性インスペクターを表示します。 「電話番号の検出」と「リンクの検出」が両方ともチェックされていないことを確認してください。

私は「リンクを検出する」チェックされていましたが、それが警告の原因であることが判明しました。基本的に、TextViewが編集可能な場合、これらの自動検出機能がオンにされたくありません。

他のヒント

メモにも使用される同様のテキストビューを持つ4つの異なるXIBがあります。私は同じ警告を受けていました。無効にするための提案 「電話番号を検出する」「リンクを検出」 警告を削除します。ただし、ユーザーがメモで検出器を使用する機能を引き続き使用してほしいと思っていました。

これが私のアプリで問題を解決した方法です:

  1. IBでは、TextViewの2つのプロパティを選択しませんでした。 - (ビルド警告を停止します)。

  2. 私の中で - (void)viewDidLoad { TextViewのプロパティを次のように設定します。myTextView.dataDetectorTypes = UIDataDetectorTypeAll; これにより、すべてのタイプのデータ検出器(電話番号とURLアドレス)が可能になります。

  3. 私のビューコントローラーで: -(void)textViewDidBeginEditing:(UITextView *)sender { 方法、データ検出器を元に戻しました オフ 使用: myTextView.dataDetectorTypes = UIDataDetectorTypeNone

  4. その後、を利用します -(void)textViewDidEndEditing:(UITextView *)sender { 方法、私はそれらを元に戻しました オン 使用: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;

このメソッドは、ユーザーがUITEXTVIEWを編集しているときにデータ検出器を無効にし、ユーザーの編集が完了したときにデータ検出器を元に戻します。この修正により、TextView内から電話番号とURLを選択できるため、機能が失われませんでした。


UitextViewのDataDetectorsのAppleドキュメントで以下を見つけました。 しばらくUitextViewをいじり回した後、それが役立つことを願っています。

uidatadetectortypes:

テキストベースのコンテンツで検出できる情報の種類を定義します。

種類:

  • uidatadetectortypephoneNumber;
  • uidatadetectortypelink;
  • uidatadetectortypenone;
  • uidatadetectortypeall;


更新:11-5-2010;

余分なメモ:UitextViewが「編集可能」である場合、データ検出器は許可されません。これは、ユーザーの変更をテキストの変更を追跡するにはあまりにも多くの変数があり、電話やリンクを実行しようとすることでタッチするためです。

解決: テキストビューをロードします self.textView.editable = NO; 上記のタイプに基づいて、uidatadetectorを設定します。これにより、ユーザーがWebアドレスや電話番号などを「選択」したい場合、代表者は処理できます。テキストビューを編集するにはユーザーが必要な場合は、 self.textView.editing = YES; &それに応じてuidatadeTectorsを削除します。これにより、コンパイル中にエラーや警告が保証されません。

特別な考慮事項:再びエナブル時にデータデクターを削除してから、「編集= yes;」を有効にしてください。

したがって、シーケンスの順序はこのようなものでなければなりません...

  • TextViewを編集するには: 1.データ検出器を削除します。2。次に、編集を有効にします=はい。

  • DataDeTectorsを使用するには: 1.編集を無効にする= no; 2.次に、データ検出器を追加します。

とても虚偽!

textView.editable = NO;
textView.dataDetectorTypes = UIDataDetectorTypeAll;

URLアドレスは「http://」で開始する必要があります。そうしないと、TextViewはそれを検出できません。

「delaustouchesbegan = yes」と「cancelstouchesinview = no」でタップgesture-recognizerを使用しようとすることを考えました。

解決するのはまだ非常に簡単です!

編集可能な無効化と同様にロードビュー UIDataDetectorTypeAll または、検出するリンクの種類。次に、GestureRecognizerを追加します。

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                             action:@selector(editTextRecognizerTabbed:)];
recognizer.delegate = self;
recognizer.numberOfTapsRequired = 1;
[self.textViewNotes addGestureRecognizer:recognizer];

したがって、このメソッド内の設定を変更できます。

- (void) editTextRecognizerTabbed:(UITapGestureRecognizer *) aRecognizer;
{
    self.textViewNotes.dataDetectorTypes = UIDataDetectorTypeNone;
    self.textViewNotes.editable = YES;
    [self.textViewNotes becomeFirstResponder];
}

少なくとも、ユーザーがテキスト入力を完了した後、編集と検出の設定を変更する必要があります。

- (void)textViewDidEndEditing:(UITextView *)textView;
{
    self.textViewNotes.editable = YES;
    self.textViewNotes.dataDetectorTypes = UIDataDetectorTypeAll;
}

魅力的な作品!

UitextViewのデータ検出器は、コピーと貼り付け用です。編集可能なものとして設定しているため、コピー/ペーストは貼り付けが必要だと思う場合は許可されてはいけませんが、コピーはすべきではありません。

SimpleNoteはどういうわけかiOS 4でこれを行います(試してみたい場合に備えて、無料/ライトバージョンがあります。)

それは少し異なります:強調表示された部品の1つをタップすると、編集を開始し、リンクに従いません。

ただし、検出されたDatatpyeをタップアンドホールドすると、呼び出し、リンクなどを開くメニューが表示されます。

また、テキスト内部をタップすると、編集が実際にタップした場所から始まります。そのため、タップが認識された後、編集を有効にし、編集を有効にし、編集可能なuitextViewにタッチを取得します。

それを行う方法はありますか?

「delaustouchesbegan = yes」と「cancelstouchesinview = no」でタップgesture-recognizerを使用しようとすることを考えました。

したがって、データコネクトルタイプを削除して、認識者のアクションメソッドで編集可能な設定を行うことができます。その後、UitextViewへのタッチが配信されることを願っています。

しかし、これまでテストする時間がありませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top