我有 A 类,它具有工具栏(以编程方式创建)和具有属性(非原子,保留)我已将该工具栏添加为 A 类中的子视图在另一个 B 类中。我想让 A 类的工具栏隐藏
怎么做 ?我正在使用但它不起作用?请给我解决方案。我正在使用 Xcode 4.3.1
我正在 B 类中编写此代码
但它不工作
ClassA *aobj= [[classA alloc] init];
[aobj.toolbar sethidden:yes];
您的代码的问题是您创建了一个新实例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
加载时隐藏工具栏,您可以创建一个变量ClassA
atClassB.h
并将其设置为您自己创建的 init 方法中提供的参数:
- (id)initWithClassA:(ClassA *)classa {
if ((self = [super init])) {
instanceOfClassA = classa;
}
return self;
}
[[classA alloc] init];
创建一个新的 ClassA 对象。ClassA 的这个新对象有他自己的新工具栏。这不是先前创建的工具栏。
要从 ClassB 访问旧工具栏,您需要将 ClassA 的旧对象传递给 ClassB。(您也可以使用委托方法,在运行时它将决定调用哪个类)
使用initWithNibName
参数传递方法:
在ClassB.h
UIViewController *parentController;
-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller;
在ClassB.m
-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
parentController = controller;
}
return self;
}
在像这样的ClassA中initWithNibName
:
objB = [[ClassB alloc] initWithNibNameAndParentController:@"..." bundle:nil :self];
现在从 ClassB.m 隐藏您的 ClassA 工具栏,如您所愿
[((ClassA*)parentController).toolbar sethidden:yes];
添加extern id context;
classA.h,然后添加id context;
classA.m(声明全局变量的@place)和add context = self;
classA的ViewDidLoad。然后在classB中导入classA.h [context.toolbar sethidden:yes];
,在这里你将a类的对象作为外部变量。这不是一个好方法。如果你需要更好的方法,请解释你是如何以及在哪里创建classB的。
尝试设置标签栏的框架。像将框架设置为超出屏幕的范围会隐藏控件。希望这会帮助你。
在 viewDidLoad 中:
self.navigationController.navigationBarHidden = YES;