2011-11-21 32 views
0

我想從我的CCLayerClass訪問我的Play類中的UIButton。從另一個類不工作的訪問UIButton?

問題是它不工作!

這是我如何聲明它在播放類: .H

IBOutlet UIButton *pauseButton; 
@property(nonatomic, retain) IBOutlet UIButton *pauseButton; 

.M

@synthesize pauseButton; 

然後在的dealloc:

[pauseButton release]; 

而且我當然連接它然後在界面生成器中。

然後在我的其他班級(我的CCLayer)班。我試圖做到這一點:

Play *play = [[[Play alloc] init] autorelease]; 
[play.pauseButton setHidden:YES]; 

事情是,它只是不隱藏按鈕。這有什麼理由嗎?

謝謝!

EDIT1: 我Play.h

IBOutlet UIButton *pauseButton; 
BOOL pauseButtonVisible; 

@property(nonatomic, retain) IBOutlet UIButton *pauseButton; 
@property(readwrite) BOOL pauseButtonVisible; 

.M

@synthesize pauseButton; 

- (void)setPauseButtonVisible: (BOOL) variableToSet { 
    pauseButtonVisible = variableToSet; 
    if(pauseButton) 
     [pauseButton setHidden: !pauseButtonVisible]; 
} 
- (BOOL) pauseButtonVisible 
{ 
    return(pauseButtonVisible); 
} 

viewWillAppear中:

[pauseButton setHidden: !pauseButtonVisible]; 

我也發確保我連它在Interface Builder

然後在CCLayerClass我這樣做:

Play *play = [[[Play alloc] init] autorelease]; 
    if(play.pauseButton == NULL) { 
     NSLog(@"pause button is NULL"); 
    } 

但是NSLog的被調用!爲什麼我的pauseButton爲NULL?我只需要分配它以保持活力,這有可能嗎?

謝謝! play.pauseButtonVisible = YES;

回答

1

好的。希望第三次是魅力(之後,我放棄了,因爲我該睡覺了)。

在.h文件中,我保留了新的pauseButtonVisible BOOL屬性。

@interface Play : UIViewController 
{ 
    BOOL pauseButtonVisible; 
    IBOutlet UIButton *pauseButton; 
} 

@property(nonatomic, retain) IBOutlet UIButton *pauseButton; 
@property(readwrite) BOOL pauseButtonVisible; 

@end  

但在.m文件,我們正在做的東西有點不同:

@interface Play 

// here we are rolling our own setters and getters 
// instead of @synthesizing... 
- (void)setPauseButtonVisible: (BOOL) variableToSet 
{ 
    pauseButtonVisible = variableToSet; 
    if(pauseButton) 
     [pauseButton setHidden: !pauseButtonVisible]; 
} 

- (BOOL) pauseButtonVisible 
{ 
    return(pauseButtonVisible); 
} 

- (void) viewWillAppear: (BOOL) animated 
{ 
    [pauseButton setHidden: !pauseButtonVisible]; 
    [super viewWillAppear: animated]; 
} 

Play *play = [[[Play alloc] init] autorelease]; // you should really be using initWithNibName, but anyways 
play.pauseButtonVisible = YES; 

所以,現在,希望暫停按鈕將是可見的或隱藏在代碼運行時的適當時間。

+0

Play是一個視圖控制器。另外,我不確定Play的所有UI元素在pauseButton不爲null之前加載的意思。這是否意味着我必須在代碼中執行某些操作才能解決此問題? –

+0

另外,pauseButton實際上是NULL,所以我該如何解決這個問題? –

+0

例如,通過'[[Play alloc] initWithNibName:@「Play」bundle:NULL]'實例化它,然後顯示它並** THEN ** pauseButton不會爲空,並且您可以以編程方式隱藏該按鈕。我希望我的信息能幫助你! –