3

我有 A 类,它具有工具栏(以编程方式创建)和具有属性(非原子,保留)我已将该工具栏添加为 A 类中的子视图在另一个 B 类中。我想让 A 类的工具栏隐藏

怎么做 ?我正在使用但它不起作用?请给我解决方案。我正在使用 Xcode 4.3.1

我正在 B 类中编写此代码

但它不工作

ClassA *aobj= [[classA alloc] init];

[aobj.toolbar sethidden:yes];
4

5 回答 5

1

您的代码的问题是您创建了一个新实例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加载时隐藏工具栏,您可以创建一个变量ClassAatClassB.h并将其设置为您自己创建的 init 方法中提供的参数:

- (id)initWithClassA:(ClassA *)classa {
     if ((self = [super init])) {
          instanceOfClassA = classa; 
     }
     return self;
}
于 2012-07-04T13:21:42.140 回答
1

[[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];
于 2012-07-04T15:01:47.050 回答
1

添加extern id context;classA.h,然后添加id context;classA.m(声明全局变量的@place)和add context = self;classA的ViewDidLoad。然后在classB中导入classA.h [context.toolbar sethidden:yes];,在这里你将a类的对象作为外部变量。这不是一个好方法。如果你需要更好的方法,请解释你是如何以及在哪里创建classB的。

于 2012-07-05T08:09:00.323 回答
0

尝试设置标签栏的框架。像将框架设置为超出屏幕的范围会隐藏控件。希望这会帮助你。

于 2012-07-04T12:17:35.157 回答
0

在 viewDidLoad 中:

self.navigationController.navigationBarHidden = YES;
于 2014-07-23T20:18:42.993 回答