2012-07-04 69 views
3

我有类A的工具栏(创建progog)&与 属性(非原子,保留)我已经添加该工具栏作为A类中的子视图在另一个类B中我想使类A隐藏iPhone:隐藏工具栏

如何做到这一点?我正在使用,但它不工作?请给我 解决方案。我使用的Xcode 4.3.1

我写在B类

这个代码,但它不工作

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

[aobj.toolbar sethidden:yes]; 
+1

通过类A的对象让它使用委托方法是对B和使[a.toolbar sethidden:YES]; –

+1

发布实际的代码。 –

+0

假设ClassA和ClassB都是视图? –

回答

1

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

0

尝试设置的TabBar的框架。比如将框架设置为超出屏幕范围将隐藏控件。希望这会帮助你。

+0

:感谢显示我的问题 兴趣有了这些答案,我解决我的问题的帮助 –

1

你的代码的问题是你创建了一个新的实例ClassA,并试图设置UIToolBar隐藏在这个从未显示在某个地方的新实例。

你需要的是一个指向屏幕上显示的ClassA的对象。

因此,尝试这样的事:

- (id)initWithClassA:(ClassA *)classa { 
    if ((self = [super init])) { 
      [classa.toolbar sethidden:yes]; 
    } 
    return self; 
} 

而当你做的ClassB实例使用此:


如果你想只有当ClassB没有隐藏工具栏你可以创建一个变量ClassAClassB.h并将其设置为你自己创建的i中提供的参数nit-method:

- (id)initWithClassA:(ClassA *)classa { 
    if ((self = [super init])) { 
      instanceOfClassA = classa; 
    } 
    return self; 
} 
+0

我也通情达理的问题,但我不能够使用你的代码 到底在哪使用此代码 作为类已经一个 - ( id)initWithNibName方法 –

+0

我认为你在'ClassA'某处初始化'ClassB',然后你将显示'ClassB'。现在,不是使用'[[ClassB alloc] initWithNibName:@“...”]''使用'[[ClassB alloc] initWithClassA:self]'。你所做的就是将'self'(self是原来的'ClassA'-Object)传递给'ClassB',它存储在那里,你可以用它来隐藏工具栏。一个类是一种描述符,你的对象是怎么样的,对象是基于你的类,并在内存中有特定的位置,如果你创建一个新的实例,你会在内存中获得一个新的位置,你明白吗? –

+0

非常感谢您的宝贵回答,它确实帮助我解决了我的问题。你的回答正确地解释了我出错的地方,应该怎么办才能解决问题 再次感谢 –

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的

现在。米隐藏工具栏的ClassA你的愿望

[((ClassA*)parentController).toolbar sethidden:yes]; 
+0

谢谢你的宝贵答案很多,它确实帮助我解决了我的问题。你的回答正确地解释了我犯的错误 再次感谢 –

0

在viewDidLoad中:

self.navigationController.navigationBarHidden = YES;