Xcode Custom Back Button Action

Wer in seiner iPhone / iPad App eine Navigation-Bar nutzt, wird vllt. irgendwann an den Punkt gelangen, an dem er, aus welchen Gründen auch immer, eigene Aktionen bei Betätigung des BackButtons durchführen möchte.

Sei es, dass Speicher sofort freigegeben werden soll, eine Audio-File sofort gestoppt oder Meldungen an den Nutzer ausgegeben werden sollen. Hierzu ist eine mögliche Lösung, den vorhandenen BackButton durch einen einen eigenen zu ersetzen.

Dieser Button führt bei Touch dann eine Methode aus, in der die eigenen Anweisungen stehen, abgeschlossen durch die Anweisung, das aktuelle Element aus dem NavigationStack zu entfernen (pop).

Einziges „Problem“ ist das Layout des Buttons, diesen wie einen Back Button erscheinen zu lassen, ermöglicht das Framwork three20. Folgender Codeausschnitt veranschaulicht die Vorgehensweise:

-(void) goBack
{
//Write your custommethods
NSlog(„hello custom Back Button“);
//Go back
[self.navigationControllerpopViewControllerAnimated:YES];
}

-(id) initWithName: (NSString*)name initwithBackround:(NSString*)backround {

// … Stuff

//Create the custom back button

TTButton *backButtonView = [TTButtonbuttonWithStyle:@“toolbarBackButton:“title:@“Back“];

[backButtonView addTarget:selfaction:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];

[backButtonView sizeToFit];

UIBarButtonItem *backButton = [[UIBarButtonItemalloc] initWithCustomView:backButtonView];

self.navigationItem.leftBarButtonItem = backButton;

[backButton release];

// Stuff

}

XCode Projekt umbennen

Wer mal ein XCode Projekt umbenennen wollte/musste war bis dato ziemlich aufgeschmissen. Das Umbenennen war ein einziger Krampf. Mit der neuen XCode Version hat Apple hier aber nachgelegt und ein Feature eingbaut, was man eigentlich in jeder Entwicklungsumgebung erwartet: Project Rename

Um ein XCode iPhone / iPad Projekt neu zu benennen einfach folgende Schritte durchlaufen:

1. Project -> Rename

2. Neuen Namen eingeben

3. Xcode überprüfen lassen, auf was sich die Änderung auswirkt

4. Snapshot erstellen lassen

5. fertig

Schlemmen iPhone App

Schlemmen iPhone App Logo

Heute mal ein klein wenig Werbung in eigener Sache:mit „Schlemmen“ ist gestern die iPhone Applikation zum Schlemmerblock veröffentlicht worden.

Technisch basiert die App auf einem XML Parser der Daten einer Schnittstelle auswertet und verarbeitet. Positon auf einer Karte, verschiedene Kartendarstellung, Umkreissuche, Restaurant Spezialitäten und Kontaktmöglichkeiten sind einige Kernfunktionaitäten der Anwendung und werden sukzessive ausgebaut.

Positive Bewertungen und Verbesserungsvorschläge werden gerne angenommen. Die nächsten Versionen sind schon in der Mache.

Enstanden ist die Anwendung unter Regie von AYCS.

UISegmentedControl Farbe ändern

Die meisten iPhone Interface Objekte sind farblich anpassbar an den gewünschten Look. Ein UISegmentedControl jedoch lässt sich zumindest über den Interface Builder nicht so schön „stylen“. Wie kann eine farbliche Anpassung geschehen, ohne die komplette Funktionalität mit UIButtons nachbauen zu müssen?

Die Lösung steckt in UISegmentedControlStyleBar und einem händischen Eingreifen in das Design dessen!

CGRect frame = CGRectMake( 0,0,100,40);
mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
mySegmentedControl.frame = frame;
mySegmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
mySegmentedControl.selectedSegmentIndex = selectedAttributeIndex;
mySegmentedControl.backgroundColor=[UIColor redColor];
[mySegmentedControl setTintColor:UIColor blueColor];

Alternativ kann die UIColor natürlich auch folgendermaßen gesetzt werden:

[UIColor colorWithRed:.5 green:.1 blue:.2 alpha:1]

An dieser Stelle sei auf die ClassReference von Apple verwiesen: UIColor zusätzlich passend zu der Thematik: UINavigationBar Color ändern und ein UIColor Cheatsheet

struct NSString expected struct NSMutableString

Bei einer solchen Ausgangssituation:

NSMutableString *currentElementValue;

if(currentElementValue==nil){
NSlog(@“nil Value“);
currentElementValue=@““;
}

Wirft XCode folgenden Fehler:

warning: incompatible Objective-C types assigning ’struct NSString *‘, expected ’struct NSMutableString *‘

Lösung:

currentElementValue=[[[NSMutableString alloc] initWithString:@““]autorelease];

uiimage uiimageview drehen rotieren

Wer ein UIImage drehen möchte, wird merken, dass es nicht funktioniert, was auch sinnvoll ist. Im Grunde möchte man ja die umschließende UIImageView drehen.

Dies funktioniert mit dem folgenden Snippet:

CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI_2);
[konkreteImageView setTransform:rotate];

Wobei der gewünschte Winkel durch eine Multiplikation von PI zustande kommt.

NSString vs NSMutableString

Wer mit Strings im iPhone / iPad Umfeld hantiert, wird früher oder später vor das Problem gestellt, wie hänge ich korrekt einen String an einen anderen.

Dabei ergeben sich zwei Möglichkeiten, entweder mit NSMutableString zu arbeiten, oder bei dem herkömmlichen NSString einen appendString vorzunehmen.

Lösung NSMutableString:

NSMutableString string1 = [[NSMutableString alloc] initWithString:@“hallo“];
[string1 appendString:@“welt“];

Lösung NSString:

NSString string2 = [[NSString alloc] initWithString:@"hallo2"];
string2 = [[[string2 autorelease] stringByAppendingString:@"welt2"] retain];

Wichtig bei der NSString Lösung, auf das autorelease und retain zu achten, da sonst Speicher nicht freigegeben wird!

Xcode All-in-one Window

xcode-all-in-one-1

Da codet man monatelang mit XCode und ärgert sich Tag um Tag über die zig Fenster die mit Debugger, Build Fenster, Konsole, Simulator und Quellcode gefüllt sind.

Dazu noch ein Browser und selbst zwei Monitore sind überfüllt.

Die Lösung ist so simpel, warum Apple das nicht als default setzt ist daher fraglich.
Im XCode Preferences -> General Tab kann man das Layout umstellen, sofern alle Projekte geschlossen sind. Wenn dieses auf „All-in-one“ geändert wird, hat man ein Fenster, in dem man zwischen Debug und Code schalten kann, ins das Debug Fenster kann dann noch die Konsole eingebettet werden -> perfekt!

xcode-all-in-one-2

xcode-all-in-one-3

Link zu Apple:
http://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/XcodeWorkspace/010-The_Project_Window/project_window.html

via:

http://www.mobileorchard.com/14-essential-xcode-tips-tricks-and-resources-for-iphone-devs

git unter Apple MaxOSX

git
Git unter Apple OSX ist eine richtig feine Sache.

Dazu benötigt man folgende Anleitungen:

http://blog.ardes.com/2008/5/19/git-hosting-with-leopard
http://www.koushikdutta.com/2009/04/setting-up-gitosis-server-on-os-x.html
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
http://theappleblog.com/2009/03/10/using-git-with-os-x-6-tools-to-get-you-up-and-running/

Dazu noch folgendes Tool:
http://gitx.frim.nl

Und für die Nutzung von XCode mit git dieses nette script:
http://www.komprovisation.de/attachments/download/16/xcode-git-init.sh (http://www.komprovisation.de/news/show/9)

Gut ist auch git gui

In der shell muss dann in das Verzeichniss gewechelt werden und bei jeder Änderung folgendes eingegeben werden:

git commit -a

Worauf ein vi aufgeht, der die Änderungen aufzeigt und ein Kommentar eingegeben werden kann. (vi speichert mit :wq.

Eine schöne Beschreibung von der git Handhabung in dieser PDF file:

http://uberhip.com/projects/presentations.html

Wer ein git repository unter debian anlegen möchte um seine eigenen git repos zu verwalten:
http://debian.asconix.com/git-central-debian-howto und mit web access:
http://www.cryptronic.de/wiki/Blogs/20070408_howto_debian_setup_subversion_daemon_with_web_access

weitere Links:

http://stefanimhoff.de/notiz/einstieg-in-git-als-versionskontrollsystem/

http://www.online-tutorials.net/programmierung/git/tutorials-t-3-263.html#erste-schritte

http://www.kernel.org/pub/software/scm/git/docs/everyday.html

http://hoth.entp.com/output/git_for_designers.html