2017-05-03 64 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 –