为其他类创建实例

时间:2017-05-03 06:50:30

标签: ios objective-c

我不知道我应该如何正确地命名标题,但我确切地知道我的问题是什么(我最后会编辑标题)。

我对Objective-C很新,我还在学习。

所以,我有一个包含tableView的类(我将其称为ClassA),另一个包含普通的UIView(ClassB)。我想要做的是,当选择一行时,让按钮出现。

我在ClassB.h文件中创建:

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

在我的ClassB.m文件中:

@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为nil。经过一些研究,我发现该方法被另一个实例调用,所以在这里我的问题是,我能做些什么来为正确的实例调用它?

修改

这是我的ClassA.m

的一部分
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger   row = [indexPath row];

    [[ClassB sharedInstance] showBtn:YES];
}

1 个答案:

答案 0 :(得分:0)

观察: ClassB是一个错误的UIViewController。 UIViewControllersviewDidLoad

实施建议:

该要求的正确实现是您使用按钮创建自定义单元格。隐藏awakeFromNib方法中的按钮。在didSelectRowAtIndex中设置cell.button.isHidden = YES

这应该单独处理上述要求。