Objective-C: eine Sammlung an Code-Schnipsel für iOS

Da man beim Programmieren von iOS Apps verschiedene Dinge immer wieder benötigt, gibt es hier mal eine Sammlung an Code-Schnipseln für Objective-C.

Index

Hintergrundgrafik in UINavigationBar

Folgender Code ermöglichen das Setzen einer Hintergrundgrafik für UINavigationBar. Dieser muss im RootViewController (direkt oberhalb von @implementation) platziert werden.

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

In iOS 5 gibt einen offiziellen Weg, um die Hintergrundgrafik zu setzen (siehe iOS Developer Library). Für abwärtskompatible Programme sollte allerdings erstere Variante beibehalten werden.

// someplace where you create the UINavigationController
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

Gefunden auf stackoverflow.com.


Elemente mit Hintergrundgrafik (Pattern) versehen

Möchte man eine Hintergrundgrafik als Pattern verwenden, d.h. wiederholt im Hintergrund anordnen, so lässt sich dies über UIColor colorWithPatternImage realisieren:

UIImage *bgImage = [[UIImage imageNamed:@"background.png"] autorelease];
((UIView *)cell.backgroundView).backgroundColor = [UIColor colorWithPatternImage:bgImage];

UIFont: verfügbare Systemschriften auslesen

Die für UIFont im System verfügbaren Schriften lassen sich mit nachstehendem Code ermitteln. Man erhält sowohl die Schriftfamilie, als auch den entsprechenden Schriftname.

NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
NSArray *fontNames;
NSInteger indFamily, indFont;
for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
{
    NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
    fontNames = [[NSArray alloc] initWithArray:
                [UIFont fontNamesForFamilyName:
                [familyNames objectAtIndex:indFamily]]];
    for (indFont=0; indFont<[fontNames count]; ++indFont)
    {
        NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
    }
    [fontNames release];
}
[familyNames release];

Strings mit Trennzeichen zusammenfügen

NSArray  *array1 = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
NSString *joinedString = [array1 componentsJoinedByString:@","];

String nach Substring durchsuchen (am Stringanfang oder an beliebiger Position)

Mit NSComparisonResult lassen sich Strings miteinander vergleichen. Die Suche nach einem Substring am Anfang von myString sieht folgendermaßen aus:

NSComparisonResult result1 = [myString compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result1 == NSOrderedSame)
{
  // ...
}

Sucht man nach einem Substring an beliebiger Position in myString, dann kann dieser Code verwendet werden:

NSComparisonResult result1 = [myString compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:[myString rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]];
if (result1 == NSOrderedSame)
{
  // ...
}

UIActionSheet über alle Views legen

In bestimmten Situationen kann ein showInView:self.view dazu führen, dass eine UITabBar (o.ä.) scheinbar über dem ActionSheet liegt und damit das Drücken des Cancel-Buttons nicht erkannt und IBAction nicht ausgelöst wird. Die Schaltfläche wird dann von diesem View scheinbar “überschnitten”. Um in einem solchen Fall ein UIActionSheet über alle Views zu legen, muss man sich der Eigenschaft keyWindow bedienen:

UIActionSheet *actionsheet = [[UIActionSheet alloc]
                             initWithTitle:nil
                             delegate:self
                             cancelButtonTitle:@"Abbrechen"
                             destructiveButtonTitle:@"Aktion!!"
                             otherButtonTitles:@"Sonstiges", nil];
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];

Leave a Reply

Your email address will not be published. Required fields are marked *