Objective-C ist eine wunderbare Sprache, die Sie erstaunliche Dinge tun können. Einer der interessantesten Aspekte ist seine dynamische Aufruf von Methoden (Nachrichten). Sie können in der Tat bekommen die Adresse einer Nachricht aus einem String.
Kategorie 'iPhone'
Sehr kurze Auszug: Objective-C NSString von Selector
Sehr kurze Auszug: UIWebView, und Anzeigen von PDF-Dateien in
Das Objekt UIWebView können verwendet werden, um mehrere Dateien angezeigt werden. Zum Beispiel können Sie es verwenden, um anzuzeigen - sowie QuickTime-Filme oder YouTube - PDF oder HTML-Datei in unserem Code enthalten.
NSString
NSString ist eine leistungsstarke Klasse, lassen Sie mich Ihnen einige der am häufigsten verwendeten Eigenschaften:
printf ()
1 2 |
Führen Sie die split ()
1 2 3 |
Konvertieren von String-Wert
1 2 3 | / / Konvertieren doubleString = @ "123" ; NSString * @ doubleString = "123"; [ doubleString doubleValue ] ; double-Wert = [doubleString doubleValue]; |
Innerhalb eines string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Substring searchString = @ "age" ; NSString * @ searchString = "Alter"; beginsTest = @ "Agencies" ; NSString * beginsTest @ = "Agenturen"; [ beginsTest rangeOfString : searchString NSRange prefixRange = [beginsTest rangeOfString: searchString NSAnchoredSearch | NSCaseInsensitiveSearch ) ] ; Optionen: (NSAnchoredSearch | NSCaseInsensitiveSearch)]; / / PrefixRange = {0, 3} endsTest = @ "BRICOLAGE" ; NSString * endsTest = @ "DIY"; [ endsTest rangeOfString : searchString NSRange suffixRange = [endsTest rangeOfString: searchString NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch ) ] ; Optionen: (NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch)]; / / SuffixRange = {6, 3} |
Sehr kurze Auszug: Verfassen von Mails in einer Anwendung iPhone, iPod oder iPad
So verfassen Mail in einer Anwendung iPhone / iPod, fügen Sie einfach den Rahmen MessageUI . In unserem Controller geben die Einbeziehung der Rahmen fest und passt die Protocolo MFMailComposeViewControllerDelegate :
Passen Sie die Abschnitte in einem UITableView gruppiert
potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Wenn wir einen Einsatz UITableView Stil Grouped wir brauchen, um das Layout der Abschnittsüberschriften, wie Kalifornien oder New York das Beispiel unten anpassen kann.

Dazu nutzen Sie bitte den folgenden Code, womit es in der Delegierte, also in die Klasse, die das Protokoll reagiert UITableViewDelegate :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / / Gibt anzeigen meiner Gewohnheit, in diesem Fall ein Objekt / / Typ UILabel UIView * ) tableView : ( UITableView * ) tableView - (UIView *) tableView: (UITableView *) tableView NSInteger ) section { viewForHeaderInSection: (NSInteger) section { [ [ [ UILabel alloc ] initWithFrame : CGRectZero ] autorelease ] ; UILabel * label = [[[UILabel alloc] initWithFrame: CGRectZero] autorelease]; UIFont boldSystemFontOfSize : 20 ] ; label.font = [UIFont boldSystemFontOfSize: 20]; label.textAlignment = UITextAlignmentCenter; UIColor blackColor ] ; label.shadowColor = [UIColor blackColor]; 1 , 1 ) ; label.shadowOffset CGSizeMake = (1, 1); "Sezione" ; // Sostituire con un array come al solito Label.Text @ = "Section", / / mit einem Array as usual Ersetzen UIColor whiteColor ] ; label.textColor = [UIColor whiteColor]; UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor]; ; label.opaque = NO; Rückholaufkleber; } / / Wir müssen auch diese Meldung nicht anderweitig Arbeit CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView NSInteger ) section { heightForHeaderInSection: (NSInteger) section { ; Rückkehr 44; } |
Es ist auch wichtig, um auch heightForHeaderInSection , wird nicht funktionieren.
Hinweise von Interesse
o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . In der Gestaltung unserer UILabel , die auch vielleicht wollen ein komplexes Objekt wie ein UIView oder UIImageView , habe ich die initialize frame CGRectZero entsprechend CGRectMake(0,0,0,0) .
Wie bekomme ich Längen-und Breitengrad in Objective-C
Das Framework stellt MapKit viele nützliche Funktionen, mit Ausnahme der Rückgabe von Längen-und Breitengrad von einer Adresse. In JavaScript, zum Beispiel, können Sie den Service von Google Geocoding zur Verfügung gestellt und diskutiert in Google Maps: Wie man Breitengrad und Längengrad von einer Adresse zu bekommen . Apple iPhone oder iPad, können Sie jedoch dieses Hindernis mit einem anderen Google-Services zu überwinden. Insbesondere können Sie direkt aufrufen, um den URL:
1 | http://maps.google.com/maps/geo?q = [Adresse] & output = csv |
Wo ist [indirizzo] , um den String mit der Adresse, die Sie wollen, um die Koordinaten zu transformieren geben. Die Ausgabe, ist vom Typ:
1 | 200,8,41.9128300,12.2241172 |
). Der erste Wert, 200 , zeigt, dass alles gut gegangen ist ( 200 OK ). Die zweite, 8 , ist Google die Richtigkeit Parameter (1-10). Die letzten beiden Werte sind schließlich Längen-und Breitengrad. Jetzt sehen wir einen Prototyp für ein Verfahren in unseren Anwendungen können enthalten sein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CLLocationCoordinate2D ) getLocationFromAddress : ( NSString * ) address { - (CLLocationCoordinate2D) getLocationFromAddress: ( NSString *) Adresse { urlString = [ NSString stringWithFormat : @ "http://maps.google.com/maps/geo?q=%@&output=csv" , NSString * urlString = [ NSString stringWithFormat: @ "% @ http://maps.google.com/maps/geo?q = & output = csv" NSUTF8StringEncoding ] ] ; [StringByAddingPercentEscapesUsingEncoding Adresse: NSUTF8StringEncoding]]; listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray * ListItems = [locationString componentsSeparatedByString: @ ""]; / / Int zoom = 0; 0.0 ; Doppel-Breite = 0,0; 0.0 ; Doppel-Länge = 0,0; listItems count ] > = 4 && [ [ listItems objectAtIndex : 0 ] isEqualToString : @ "200" ] ) { if ([ListItems count]> = 4 & & [[ListItems objectAtIndex: 0] isEqualToString: @ "200"]) { / / Zoom = [[ListItems objectAtIndex: 1] intValue]; listItems objectAtIndex : 2 ] doubleValue ] ; Latitude = [[ListItems objectAtIndex: 2] doubleValue]; listItems objectAtIndex : 3 ] doubleValue ] ; Länge = [[ListItems objectAtIndex: 3] doubleValue]; { Else {} / / Fehler } CLLocationCoordinate2D location; location.latitude = Breite; location.longitude = Länge; Ort der Rückgabe ist; } |
Hinweise von Interesse
, alla stregua della funzione explode ( ) del PHP per intenderci. Der String zurückgegeben in locationString "split" wird durch das Verfahren componentsSeparatedByString , wie die Funktion explode ( ) in PHP zum Beispiel. Ich habe das Beispiel, das ich vorgeschlagen - aber bemerkte - der Code selbst die Google Genauigkeit Parameter, Genauigkeit oder Skalierungsfaktor, bezeichnen wir abrufen zoom .
Quelle als
Für Vollständigkeit, ich machte kleine Beispiel-Anwendung , mit der Sie die Methode oben vorgeschlagenen versuchen können, geben Sie eine beliebige Adresse und das iPhone wird auf der Karte zu zeigen.
Ich danke dem Team devapp für die Inspiration dieses Artikels.
setAnimationDidStopSelector: verschiedene Verwendungen und Fortgeschrittene
In den meisten Fällen, oder weil wir es gewohnt, oder weil wir haben in Tutorien gesehen und in einigen Texten, verwenden wir die setAnimationDidStopSelector auf diese Weise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [UIView setAnimationDelegate: self]; @selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)]; ; myView.alpha = 0; ; [UIView commitAnimations]; / / void ) removeView { - (Void) {removeView ; [MyView removeFromSuperview]; } |
come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. In den obigen Code die setAnimationDelegate Satz self als Delegierter und durch setAnimationDidStopSelector sendet eine Nachricht removeView , wenn die Animation beendet ist. Der Code selbst ist richtig, aber nutzt eine Nachricht Definition ( removeView ), die weggelassen werden könnte. Nun, hier ist der gleiche Code, mit dem gleichen Effekt, ohne die Nachricht removeView :
1 2 3 4 5 6 7 8 9 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)]; ; myView.alpha = 0; ; [UIView commitAnimations]; |
! Das Interessante an diesem Ansatz ist, dass myView könnte eine Unterklasse von werden UIView ! Es kann daher eine benutzerdefinierte Klasse mit eigenen Nachrichten und, wie gesagt, leicht aufrufbar sein setAnimationDidStopSelector . Darüber hinaus die setAnimationDidStopSelector einverstanden Selektoren mit den Parametern:
1 2 3 4 5 6 7 8 9 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1:)]; ; myView.alpha = 0; ; [UIView commitAnimations]; |
Dieses Beispiel auf alle Fälle hier, wo wir ein Delegierter erweitert werden kann, ist Atro nicht einen Zeiger auf eine Instanz eines Objekts.
iPhone: Beseitigen Sie die Schatten-Effekt beim Scrollen eine UIWebView
In dieser letzten Periode war ich auf drei Anwendungen für Apple iPhone, nahezu gleichzeitig. Zwei wurden bereits von Apple zugelassen und sind auf dem App Store entfernt: ihrerstes und iMakeLove .
In beiden Anwendungen haben die Verwendung eines Gegenstandes angenommen UIWebView den Anweisungen anzuzeigen.
Das Objekt UIWebView ilevato war wirklich komfortabel in diesem Fall. Es erlaubte mir, um schnell und eine schöne Texte, Bilder, und begleitet, wenn nichts anderes auf einer Webseite (Flash auf dem iPhone nicht im Lieferumfang enthalten) angezeigt wird.

Das Objekt UIWebView ist wirklich vielseitig und braucht nur sehr wenige Einstellungen verwendet werden. Der einzige Mangel ist die Anwesenheit von einem geheimnisvollen Schatten, wenn Sie eine Schriftrolle aus dem Bereich der Kontrolle ist an der Unterseite als an der Spitze zu machen scheint:

Nach einigen Recherchen wurde mir klar, dass dieses Verhalten auf die SDK, vor allem die neuesten Updates ab. Und Apple hat noch keine offizielle Erklärung dazu, wie um es zu entfernen entlassen, im Gegenteil, wies er als Code ist nicht eine Reihe von Hacks, die Verwendung von sensiblen Funktionen zu machen, oder die Dokumentation erlaubt. Schließlich gab ich auf, sowohl in Bezug auf Zeit, und weil die Lösungen schienen alle aus der Box Apple.
Zum Glück habe ich die Lösung habe, hoffe ich, ziemlich regelmäßig, die das Problem (Dank zu lösen scheint, Adolfo ):
1 2 3 4 5 6 | / / WebView ist die Kontrolle UIWebView [ webView.subviews objectAtIndex : 0 ] ; id = scroller [webView.subviews objectAtIndex: 0]; UIView * subView in [ scroller subviews ] ) for (UIView * Subview in [scroller Unteransichten]) subView class ] description ] isEqualToString : @ "UIImageView" ] ) if ([[[Subview Klasse] description] isEqualToString: @ "UIImageView"]) ; subView.hidden = YES; |
Wie durch spitze Adolfo , aber das ist ein Hack, der nicht mehr funktionieren mit zukünftigen Versionen des SDK kann.
Wie man Bilder und Ansichten in Interface Builder finden
Nach der Erläuterung , wie wir unsere Saiten in Xcode zu finden , ist es einfach, jetzt, wie zu sehen - durch die Anwendung der gleichen Technik - zu lokalisieren und Betrachtung von Bildern / interfaces mit Interface Builder erstellt.
Suchen Sie Graphik-Ressourcen
Der Prozess, wie erwähnt, ist die gleiche, wenn wir ein Bild bereits in unsere Ressourcen enthalten sind, oder sie setzen einen neuen ein, und wir wollen "locate" - das heißt, auf zwei oder mehr Bilder auf Basis der unterstützten Sprachen zu verwalten - klicken Sie einfach auf den Button Bild rechts ( Adium.png in diesem Beispiel), und wählen Sie Get Info:

Make File Localizable wir in der unteren linken Seite klicken.

Wir klicken Sie auf Hinzufügen und fügen Localization Italian :

Um zu erhalten:

esattamente come accadeva con il testo: Unser Bild bewegt wird (physisch, eines der seltenen Male, wenn das passiert nell'alberatura Xcode auf dem Dateisystem wird reflektiert) unter virtuellen Ordnern English.lproj und Italian.lproj genau wie mit dem Text passiert:

contiene una stessa versione dell'immagine. An dieser Stelle jeden der Ordner English.lproj und Italian.lproj enthält die gleiche Version des Bildes. Standardmäßig - - die englische Version Dieses Bild ist in Interface Builder, wo wir sehen, manipuliert.
An diesem Punkt einfach überschreiben einer (oder beide Dateien Adium.png ) zu einem Ort der Bilder "flash" erhalten.
Suchen Sie die Dateien XIB
Auch die Schnittstellen mit Interface Builder gebaut werden können in ihrer Gesamtheit entfernt werden, wenn es für notwendig erachtet wird. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: Das Verfahren ist identisch mit dem grafischen Fähigkeiten durchgeführt: Fügen Sie ein ViewController (zB infoViewController ) XIB-Schnittstelle, wählen wir sie, wählen Sie Get Info aus dem Kontextmenü, geben Sie der Datei lokalisierbar, fügen Sie die italienische Lokalisierung:

Klicken Italiano oder Italienisch öffnet Interface Builder! ) all'interno della classica cartella Classes . Dieses Mal das Dateisystem, werden Sie feststellen, dass Sie zwei Verzeichnisse (erstellt English.lproj und Italian.lproj ) innerhalb der klassischen Klassen-Ordner. Beide haben ihre Dateien infoViewController.xib . Der Komfort in diesem, deutlich in den Code behoben, und wann wir unsere Controller-Code instanziieren wir eine "saubere" wie diese haben:
1 2 | [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Wie Sie sehen können gibt es keine Spur von Aussage über die Lage, völlig vom System verwaltet. Die beiden Schnittstellen, natürlich, können ganz unterschiedlich sein, wie wirksam sind als zwei separate XIB-Datei.
Wie Sie Ihr eigenes Protokoll mit delegierten erstellen
Selbst in den einfachen Tutorial finden Sie die Verwendung von Protokollen. Es wird sicherlich für viele in Ihrer View-Controller zufällig ein Protokoll verwenden, verteilen, neben der Definition der Schnittstelle, eine Anweisung ähnlich:
1 2 3 | UIViewController <uiwebviewdelegate> { @ Interface myViewController: UIViewController {<uiwebviewdelegate> ... } |










Neueste Kommentare
Mark : @ Mark: Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Mark : Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Giovambattista Fazioli : @ Mark: Im Prinzip, absolut, hängt viel ab, wie und was zum Download bereit. La ..
Mark : Hallo, guter Führer! Ich wollte fragen, können Sie den gleichen Code, um eine SQL-Datenbank laufen? Statt ...
Joseph : Hallo Ich wollte Sie fragen, wie können Sie in der Post finde ich hochgeladen einer Galerie von 50 Bildern, zum Beispiel ...