我在各种屏幕中反复使用了很多方法。我尝试创建一个包含这些方法的核心类,然后根据需要在各种控制器中调用它们。一个是隐藏时返回导航栏,我不完全确定如何做到这一点。这就是我试过的:
Core.h
-(void) returnNavBar;
和
Core.m
-(void) returnNavBar{
//show navigation bar - hidden in TabBarController
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
但是self.navigationController
以黄色突出显示。如果有任何不清楚的地方,请提问。
答案 0 :(得分:3)
在这种情况下使用self
是错误的,因为在这种情况下self
是Core
对象的实例,而不是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调用放在那里更快或更清楚是值得商榷的。对于更复杂的操作可能更有意义。