Frage

Ich bekomme eine interessante Warnung zur Build -Zeit (iPhone -Simulator), die Folgendes gibt:

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

Dies ist im Grunde genommen nicht existiert bei Google und ich möchte es entfernen.

Meine editView.xib verfügt über eine Textansicht, in der ich Notizen in sie schreibe. Gibt es weitere Informationen, die benötigt werden?

War es hilfreich?

Lösung

Ich habe diese Warnung auch gesehen. So habe ich es repariert:

Wählen Sie in der XIB -Datei im Schnittstellenbuilder Ihre Textansicht aus und rufen Sie den Attributeninspektor auf. Stellen Sie sicher, dass "Telefonnummern" und "Erkennung von Links" deaktiviert sind.

Ich hatte "Links erkannt" überprüft, und es stellte sich heraus, dass dies die Warnung verursachte. Wenn die Textansicht bearbeitet werden kann, möchten Sie, dass diese automatischen Erstellungsfunktionen nicht eingeschaltet werden.

Andere Tipps

Ich habe vier verschiedene XIBs mit ähnlichen Textviews, die auch für Notizen verwendet werden. Ich bekam die gleichen Warnungen. Der Vorschlag, das zu deaktivieren "Telefonnummern erkennt" und "Links erfasst" Entfernt die Warnungen. Ich wollte jedoch, dass meine Benutzer immer noch die Möglichkeit haben, die Detektoren in meinen Notizen zu verwenden.

So habe ich das Problem in meiner App gelöst:

  1. In IB: Ich habe die beiden Eigenschaften für das Textview abgewählt. -(was die Bauwarnungen stoppt).

  2. In meinem - (void)viewDidLoad { Ich habe die Eigenschaften des Textviews auf Folgendes festgelegt:myTextView.dataDetectorTypes = UIDataDetectorTypeAll; Dies ermöglicht die Datendetektoren aller Typen (Telefonnummern und URL -Adressen).

  3. Meiner Ansichtsregler: -(void)textViewDidBeginEditing:(UITextView *)sender { Methode, ich habe die Datendetektoren zurückgegeben AUS Verwenden: myTextView.dataDetectorTypes = UIDataDetectorTypeNone

  4. Dann die ausnutzen -(void)textViewDidEndEditing:(UITextView *)sender { Methode, ich drehte sie zurück AN Verwenden: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;

Diese Methode deaktiviert die Datendetektoren, wenn der Benutzer die UitextView bearbeitet, und macht die Datendetektoren wieder ein, wenn der Benutzer bearbeitet wird. Diese Korrektur erlaubte die Auswahl der Telefonnummern und URL aus dem Textview, so dass ich die Funktion nicht verloren habe.


Ich habe Folgendes in den Apple -Dokumenten in den Datadetektoren für uitextView gefunden: Nachdem Sie eine Weile mit der UitextView herumgespielt haben, hoffe es, dass es hilft.

Uidatadetektortypen:

Definiert die Arten von Informationen, die in textbasierten Inhalten erkannt werden können.

Typen:

  • UidatadEtectortypephonNumber;
  • UidatadEtectortypelink;
  • UidatadEtectortypenon;
  • UidatadEtectortypeall;


Update: 11-5-2010;

Zusätzliche Anmerkung:Datendetektoren sind nicht gestattet, wenn uitextView "bearbeitbar" ist, da es zu viele Variablen gibt, um Benutzer Änderungen im Text zu verfolgen, sowie beim Versuch, Telefonanrufe oder Links auszuführen.

Lösung: Laden Sie die Textansicht mit self.textView.editable = NO; und setzen Sie uidatadetector basierend auf den oben aufgeführten Typen. Auf diese Weise kann der Delegierte, wenn der Benutzer eine Webadresse oder Telefonnummer usw. auswählen möchte. Wenn Sie Ihr Benutzer benötigen, um die Textansicht zu bearbeiten, schalten Sie die ein self.textView.editing = YES; und entfernen Sie Ihre Uidatadetektoren entsprechend. Dies sollte keine Fehler oder Warnungen während des Zusammenstellens sicherstellen.

Besondere Überlegung:Entfernen Sie zuerst die DataDectors bei der Wiedereinstellung und aktivieren Sie dann "Bearbeiten = Ja" ... die Reihenfolge ist wichtig, um die Bearbeitung zu aktivieren, wenn uidatadEtektoren noch zugewiesen sind.

Daher sollte die Sequenzreihenfolge so etwas sein ...

  • So bearbeiten Sie TextView: 1. Datendetektoren entfernen, 2. Aktivieren Sie dann Bearbeiten = Ja.

  • Verwenden von Datadetektoren: 1. Bearbeiten deaktivieren = nein; 2. Fügen Sie dann Datendetektoren hinzu.

So wortreich!

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

Die URL -Adresse muss mit "http: //" beginnen, andernfalls kann der Textview sie nicht erkennen.

Ich habe darüber nachgedacht, einen Tap -ger-Recognizer mit "DelysoUtouchesbean = Ja" und "Cancelbouchesinview = nein" zu verwenden.

Es ist immer noch ziemlich einfach zu lösen!

Laden Sie die Ansicht sowohl mit realisierbarer Behinderung als auch mit UIDataDetectorTypeAll oder die Arten von Links, die Sie erkennen möchten. Fügen Sie dann einen Gesturtererzucht hinzu:

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

So können Sie Einstellungen innerhalb dieser Methode ändern:

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

Zumindest müssen Sie die Einstellungen für Bearbeitungs- und Erfassungen wieder ändern, nachdem der Benutzer die Texteingabe beendet hat:

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

Funktioniert wie ein Zauber!

Datendetektoren für die UitextView sind für das Kopieren und Einfügen. Da Sie es als bearbeitbar festlegen, sollte das Kopieren/Einfügen nicht zulässig sein, wenn Sie der Meinung sind, dass Einfügen sollte, aber das Kopieren nicht.

SimpleNote macht dies irgendwie auf iOS 4. (Es gibt eine kostenlose/lite -Version, falls Sie es versuchen möchten.)

Es wirkt ein bisschen anders: Beim Tippen auf einen der hervorgehobenen Teile beginnt es immer noch die Bearbeitung und folgt dem Link nicht.

Wenn Sie jedoch auf einem erkannten DataTpye tippen und hinten, werden Sie das Menü zum Aufrufen angezeigt. Öffnen Sie den Link oder was auch immer.

Auch beim Tippen in den Text beginnt die Bearbeitung wirklich an dem Ort, an dem Sie geklopft haben. Deshalb entfernen sie die DataDectectors irgendwie, aktivieren das Bearbeiten und lassen die Berührungen nach dem Erkennen des Tipps an die bearbeitbare UitextView weitergeleitet.

Irgendwelche Ideen, wie man das macht?

Ich habe darüber nachgedacht, einen Tap -ger-Recognizer mit "DelysoUtouchesbean = Ja" und "Cancelbouchesinview = nein" zu verwenden.

So kann ich die DataConNectortypen entfernen und auf die Aktionsmethode des Erkenntnisses bearbeitet werden, und hoffentlich werden die Berührungen zum UitextView danach geliefert.

Hatte aber bisher keine Zeit, es zu testen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top