Глобальная функция - PullRequest
       5

Глобальная функция

0 голосов
/ 28 декабря 2010

Я делаю это на каждом контроллере uitableview, который у меня есть.

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

Есть ли способ, которым я могу создать собственный класс, который делает это для меня? Вроде таких

[StyleDefaults setNavStyles];

где

@implementation StyleDefaults

+(void) setNavStyle {

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

}

@end

Я получаю эту ошибку: запрос члена 'navigationBar' во что-то, не являющееся структурой или объединением

Я знаю, почему я это понимаю, но есть ли способ обойти эту проблему?

Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

Когда вы перемещаете этот код в другой класс, self больше не является UITableViewController, в котором он находился. Вы можете передать ссылку на UITableViewController в метод, чтобы он мог получить доступ к этим свойствам навигации.

Добавьте параметр типа UIViewController (UITableViewControllers являются его подклассами) и замените self на параметр:

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

Затем вызовите метод из UITableViewControllers следующим образом:

[StyleDefaults setNavStyle:self];
1 голос
/ 28 декабря 2010

Я бы предложил использовать категорию для этой задачи. Посмотрите этот совет на MacDeveloper
Ваш интерфейс будет выглядеть так:

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

и реализация может выглядеть так:

@implementation UIViewController (myDefaultStyle)    

 -(void) setupMyStyle {

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

 }

Теперь все, что выв вашем фактическом контроллере представления нужно импортировать категорию и вызывать [self setupMyStyle] там, где это имеет смысл.
Хотя он выполняет те же функции, что и передача ссылки на себя в статическую функцию, он более понятен и, возможно, дажена ступеньку быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...