2010-12-28 14 views
0

Ich mache dies in jedem uitableviewcontroller, den ich habe.Globale Funktion

self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"imageName"]]; 
self.navigationItem.titleView = headerView; 

Gibt es eine Möglichkeit, eine benutzerdefinierte Klasse erstellen, die dies für mich tut? Wie solche

[StyleDefaults setNavStyles]; 

wo

@implementation StyleDefaults 

+(void) setNavStyle { 

    self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    self.navigationItem.titleView = headerView; 

} 

@end 

ich diesen Fehler: Antrag auf Mitglieder navigationbar 'in etwas keine Struktur oder Union

Ich weiß, warum ich das bekommen, aber gibt es eine Um dieses Problem herum?

Vielen Dank für Ihre Zeit.

Antwort

3

Wenn Sie diesen Code in eine andere Klasse verschieben, ist self nicht mehr der UITableViewController, in dem er sich befand. Sie können einen Verweis auf den UITableViewController in die Methode eingeben, damit er auf diese Navigationseigenschaften zugreifen kann.

einen Parameter vom Typ UIViewController hinzufügen (UITableViewControllers Subklassen von denen sind) und ersetzen self mit dem Parameter:

+(void) setNavStyle:(UIViewController *)viewController {  
    viewController.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    viewController.navigationItem.titleView = headerView; 
} 

dann von den UITableViewControllers wie dies die Methode aufrufen:

[StyleDefaults setNavStyle:self]; 
+0

Viel bessere Lösung als Kategorien. – bbum

1

würde ich schlagen Sie vor, eine Kategorie für diese Aufgabe zu verwenden. See this tip on MacDeveloper
Ihre Schnittstelle würde wie folgt aussehen:

@interface UIViewController (myDefaultStyle) 
-(void) setupMyStyle; 
@end 

und die Umsetzung könnte wie folgt aussehen:

@implementation UIViewController (myDefaultStyle)  

-(void) setupMyStyle { 

    self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    self.navigationItem.titleView = headerView; 

} 

Jetzt alles, was Sie in Ihren aktuellen View-Controller tun müssen, würden, ist die Kategorie importieren und Rufen Sie [self setupMyStyle] an, wo es Sinn macht.
Während es den gleichen Zweck dient wie die Übergabe einer Referenz an self in eine statische Funktion, ist es klarer Code und vielleicht sogar eine Kerbe schneller.

+2

Verwenden Sie ** ** nicht ** eine Kategorie dafür. Oder, wenn Sie wirklich diesen Weg gehen wollen, ** stellen Sie Ihren Methoden immer etwas Einzigartiges vor **. Durch das Hinzufügen dieser Methode in einer Kategorie wird jede Instanz dieser Klasse und Unterklasse auf diese Methode reagieren. Wenn Sie Ihre Methode genauso benennen wie eine bestehende Methode (oder eine, die in der Zukunft erscheint), wird Ihre App auf mysteriöse Weise durchbrechen. – bbum

Verwandte Themen