我有一个A类,它有一个工具栏(以编程方式创建),并且使用property(nonatomic,retain)将该工具栏添加为A类的子视图。在另一个B类中,我想隐藏A类的工具栏。
如何做到这一点?我正在使用但它不起作用?请给我解决方案。我正在使用Xcode 4.3.1
我在B类中编写了以下代码:
但它不起作用
ClassA *aobj= [[classA alloc] init];
[aobj.toolbar sethidden:yes];
我有一个A类,它有一个工具栏(以编程方式创建),并且使用property(nonatomic,retain)将该工具栏添加为A类的子视图。在另一个B类中,我想隐藏A类的工具栏。
如何做到这一点?我正在使用但它不起作用?请给我解决方案。我正在使用Xcode 4.3.1
我在B类中编写了以下代码:
但它不起作用
ClassA *aobj= [[classA alloc] init];
[aobj.toolbar sethidden:yes];
extern id context;
,然后在classA.m中(@全局变量声明的位置)添加id context;
和add context = self;
在classA的ViewDidLoad方法中。然后在classB中导入classA.h并使用[context.toolbar sethidden:yes];
,这里你将classA对象作为外部变量进行了声明。这不是一个好的方法。如果你需要更好的方法,请解释一下你在哪里以及如何创建classB。ClassA
实例,并尝试在这个从未显示过的新实例上设置UIToolBar
隐藏。ClassA
的对象。- (id)initWithClassA:(ClassA *)classa {
if ((self = [super init])) {
[classa.toolbar sethidden:yes];
}
return self;
}
当你创建一个 ClassB
实例时,使用以下代码:
ClassB classb = [[ClassB alloc] initWithClassA:self];
ClassB
加载完成后隐藏工具栏,您可以在ClassB.h
中创建一个ClassA
变量,并将其设置为您自己创建的init方法中提供的参数。- (id)initWithClassA:(ClassA *)classa {
if ((self = [super init])) {
instanceOfClassA = classa;
}
return self;
}
ClassA
的某个地方初始化了ClassB
,然后你要显示ClassB
。现在,你不再使用[[ClassB alloc] initWithNibName:@"..."]
,而是使用[[ClassB alloc] initWithClassA:self]
。你所做的是将self
(self是原始的ClassA
对象)传递给ClassB
,在那里它被存储,并且你可以使用它来隐藏工具栏。类是一种描述符,用于描述对象的外观,对象基于类并具有其特定的内存位置,如果你创建一个新实例,你将获得一个新的内存位置,你明白吗? - Fabio Poloni[[classA alloc] init];
创建一个新的 ClassA 对象。这个新的 ClassA 对象有它自己的新工具栏。这不是之前创建的工具栏。
要访问 ClassB 中的旧工具栏,您需要将旧的 ClassA 对象传递给 ClassB。(您也可以使用委托方法,在运行时决定调用哪个类)
使用 initWithNibName
参数传递方法:
在 ClassB.h
中:
UIViewController *parentController;
-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller;
In ClassB.m
-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
parentController = controller;
}
return self;
}
initWithNibName
的写法如下:objB = [[ClassB alloc] initWithNibNameAndParentController:@"..." bundle:nil :self];
现在你可以根据自己的意愿从ClassB.m中隐藏ClassA工具栏
[((ClassA*)parentController).toolbar sethidden:yes];
在viewDidLoad中:
self.navigationController.navigationBarHidden = YES;