全球功能

时间:2010-12-28 02:28:11

标签: iphone objective-c uinavigationcontroller

我在我拥有的每个uitableviewcontroller中都这样做。

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 个答案:

答案 0 :(得分:3)

当您将该代码移动到另一个类时,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 :(得分:1)

我建议使用一个类别来执行此任务。 See this tip on 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]
虽然它的作用与将自我引用传递给静态函数的目的相同,但它的代码更清晰,甚至可能更快。