2012-07-04 222 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;