创建一个包含常用方法的`Core`类

时间:2014-03-26 09:53:34

标签: ios objective-c

我在各种屏幕中反复使用了很多方法。我尝试创建一个包含这些方法的核心类,然后根据需要在各种控制器中调用它们。一个是隐藏时返回导航栏,我不完全确定如何做到这一点。这就是我试过的:

Core.h


-(void) returnNavBar;

Core.m

-(void) returnNavBar{
     //show navigation bar - hidden in TabBarController
     [self.navigationController setNavigationBarHidden:NO animated:NO];

}

但是self.navigationController以黄色突出显示。如果有任何不清楚的地方,请提问。

2 个答案:

答案 0 :(得分:3)

在这种情况下使用self是错误的,因为在这种情况下selfCore对象的实例,而不是UIViewController,因此没有财产navigationController

UIViewController上的Objective-C类别中您想要的内容。

的UIViewController + Core.h

#import <Foundation/Foundation.h>

@interface UIViewController (Core)

-(void) returnNavBar;

@end

的UIViewController + Core.m

#import "UIViewController+Core.h"

@implementation UIViewController (Core)

-(void) returnNavBar{
     //show navigation bar - hidden in TabBarController
     [self.navigationController setNavigationBarHidden:NO animated:NO];    
}

@end

然后只需导入yout viewcontroller .m文件中的UIViewController+Core.h即可调用returnNavBar方法。

答案 1 :(得分:2)

正如你在core.c中声明了方法一样,这些方法将与核心类相关联,因此self.navigationController不会被定义 - 你的核心类没有这个属性。即使您确实定义了此属性,也不会将其初始化为调用类的navigationController。

你可以这样做的一种方法是使用类方法并传入所有必需的参数,所以你会有

Core.h

+(void) returnNavBar:(UINavigationController *)navController;

Core.m

+ (void) returnNavBar:(UINavigationController *)navController
{
    [navController setNavigationBarHidden:NO animated:NO];
}

注意&#34; +&#34;而不是&#34; - &#34;它将此标记为类方法

要调用它,您可以调用

    [core returnNavBar:self.NavigationController];

但是,这是否比简单地将setNavigationBarHidden调用放在那里更快或更清楚是值得商榷的。对于更复杂的操作可能更有意义。