2017-05-03 65 views
0

我不知道我應該如何正確命名標題,但我確切地知道我的問題是什麼(我最終將編輯標題)。爲其他類創建實例

我是Objective-C的新手,我仍然在學習。因此,我有一個包含tableView(我將稱之爲ClassA)和另一個具有普通UIView(ClassB)的類。我想要做的是在選擇一行時讓按鈕出現。

+(id)sharedInstance; 
@property (retain, nonatomic) IBOutlet UIButton *btn; 
-(void) showBtn :(BOOL) show; 

在我ClassB.m文件:

我在ClassB.h文件中創建

@synthesize btn; 

static ClassB *this = nil; 

(+id) sharedInstance { 

    if(!this) { 
     @synchronized (self) { 
      this = [[ClassB alloc] init]; 
     } 
    } 
    return this; 
} 

-(void)viewDidLoad { 

    [self showBtn:NO] //because I only want to let it appear when a row is selected. 
    [self.view addSubview:btn]; 

} 

-(void) showBtn :(BOOL) show { // I called this method in classA. 


    if (show == NO) { 
     btn.hidden = YES; 
    } else { 
     btn.hidden = NO; 
    } 
} 

所以,當我啓動我的應用程序,隱藏按鈕並保持隱時現我選擇一行。我調試了一下,發現在ClassA中調用該方法時btn爲零。經過一番研究,我發現該方法被稱爲另一個實例,所以在這裏我的問題,我能做些什麼,讓它調用正確的實例?我ClassA.m的

編輯

這裏部分

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSInteger row = [indexPath row]; 

    [[ClassB sharedInstance] showBtn:YES]; 
} 
+0

您正在將'showBtn'方法添加到視圖中,這是不可能的。你可能意思是'[self.view addSubview:btn];'使用不太神祕的名字可以避免這些錯誤。 – vadian

+0

你如何創建實例? – Priyal

+0

對不起,是一個輸入錯誤。這是btn。我在這裏簡化了名稱,使它們更通用 –

回答

0

觀察:的ClassB的是一個UIViewController這是不對的。 UIViewControllersviewDidLoad

實施意見:

正確實施的要求是,你創建一個按鈕自定義單元格。隱藏awakeFromNib方法中的按鈕。在didSelectRowAtIndex中設置了cell.button.isHidden = YES

這應該獨自照顧上述要求。

+0

事情是,ClassA是在一個容器視圖的ClassB和按鈕應該在ClassB –