2012-03-26 19 views
0

Ich versuche, eine App zu erstellen, mit der Sie zu einer bestimmten App für die entsprechende App gehen können (insbesondere regelmäßige Web-Links zu Safari, YouTube-Links zu YouTube, Google Map-Links werden zur Google Maps App geleitet, Textzeilen werden an die Notes App gesendet und Telefonnummern werden entweder an Kontakte (für jedes andere iOS-Gerät als das iPhone) oder an die Telefon-App weitergeleitet. Alle Daten werden in einer Tabellenansicht angezeigt .erkennen Sie Telefonnummern und Text (internationale Nummern enthalten)

Für jetzt habe ich eine NSMutableArray, die einige Dummy-Daten (speziell eine von jeder Art von Daten). Ich war erfolgreich mit dem Weblink, YouTube Link und Google Maps Link. Das Problem ist, ich weiß nicht, wie ich es bekommen kann, um nationale und internationale Telefonnummern zu erkennen.

Hier ist die NSMutableArray Daten:

NSMutableArray *sites = [[NSMutableArray alloc] initWithObjects:@"http://www.apple.com/", @"http://www.youtube.com/watch?v=QH2-TGUlwu4", @"http://maps.google.com/maps?saddr=CN+Tower&daddr=1+Yorkdale+Road+%23500,+Toronto,+ON+M6A+2T9,+Canada+(Yorkdale+Shopping+Centre)&hl=en&sll=43.68515,-79.422475&sspn=0.133818,0.308647&geocode=FdzumQIdjqBE-yGBdRzexNjtFQ%3BFUk0mwIdOp1D-yG5Hg9iD9hImQ&vpsrc=0&t=w&mra=ls&z=12", @"This is a test", @"(416)-555-5555", nil]; 

Auch ...

self.cloudsendList = sites; 

Hier ist der Code, den ich in Bezug auf die so weit haben, wenn der Benutzer tippt auf einer Tabellenansicht Zelle:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @"%@", [cloudsendList objectAtIndex:indexPath.row]]]]; 
} 

Ich weiß nicht, ob ich dies mit vielen Zeilen Code tun muss, aber, ist es möglich? Und wenn es so ist, wie würden Sie es schaffen? Wenn Gebrauch mehr Code sehen muss, um zu verstehen, dann kann ich die relevanten Informationen gerne veröffentlichen. Ich hoffe, dass ich nicht zu viele Probleme verursacht habe, aber ich hoffe, dass Sie mir helfen konnten. Ich entschuldige mich, wenn das klingt wie ein totaler Noob. Danke im Voraus! :)

Antwort

2

Mein Gefühl ist, dass, da Apple dies bereits in UITextView Daten-Detektoren gelöst hat, es wahrscheinlich am besten wäre, ihre Lösung zu verwenden. Allzweck-Telefonnummern-Detektor/Formatierer sind sehr schwierig zu implementieren (auch Apple ist nicht perfekt) und Sie würden wahrscheinlich viel Zeit auf eine sehr fragile Lösung verbringen.

Ich würde vorschlagen, ein UITextView der UITableViewCell contentView (Größe und formatiert korrekt) und stellen Sie sicher, dass die Datenerkennung eingeschaltet ist.

+0

Ok. Nun, wie würde der Code in Bezug auf den Code aussehen, den ich derzeit habe? Nur um Sie zu informieren, muss die Tabellenansichtszelle mit den Informationen ausgewählt werden, nicht der Text selbst. – chrisjr

+0

Setzen Sie UITextView auf editierbar = NO. Der Text wird zu Links wie auf einer Webseite und es macht automatisch das Richtige. Dies ist am einfachsten, aber vielleicht gefällt Ihnen der visuelle Stil nicht. – sosborn

+0

Hmmm ... was ist mit NSPredate? Würden Sie das empfehlen? – chrisjr

0

Sie werden reguläre Ausdrücke verwenden wollen. Das ist der einzige Weg, es richtig zu machen. Hier ist ein Index von vielen von ihnen.

http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=6&AspxAutoDetectCookieSupport=1

Ich bin nicht sicher, dass Sie alle Länder mit einem regulären Ausdruck zu erkennen in der Lage sein werden. Sie müssen möglicherweise mehrere Durchläufe durchführen, um für alle von ihnen zu kehren.

Also scrub durch alle Ihre Daten, speichern Sie Ihre Übereinstimmungen für diesen Datenblock und rufen Sie dann die URL mit diesen Daten auf. Sicher weißt du, ob/sonst in obj c.

+0

Ok, sagen wir mal, dass es UK-Nummern erkannt hat (^ (\ + 44 \ s? 7 \ d {3} | \ (? 07 \ d {3} \)?) \ S? \ D {3} \ s? \ d {3} $) und nur Zahlen aus den USA/Kanada (^ (1? (-? \ d {3}) -?)? (\ d {3}) (-? \ d {4}) $), wie würde der Code in Bezug auf den Code, den ich derzeit habe, aussehen. Ich stelle mir vor, dass ich die "Wenn" -Aussagen verwenden müsste und ich weiß, dass ich "Tel:" verwenden müsste. – chrisjr

+0

Nicht sicher, wie genau in objective-c Versuchen Sie das aus. Ich kann nicht wirklich aus deinem Code ersehen, was alles passiert. http://stackoverflow.com/questions/422138/regular-expressions-in-an-objective-c-cocoa-application – FlavorScape

+0

Ok. Danke, dass du mir geholfen hast. Ich schätze es sehr. – chrisjr

1

Anstatt zu rollen, check Apple's NSDataDetector class. Ich bin zu 99% sicher, dass diese Klasse eine Reihe von Regex verwendet, aber der Vorteil ist, dass es viel mehr Tests standgehalten hat, als Sie jemals vernünftigerweise selbst tun könnten.

Verwandte Themen