タイトルの名前を正しく指定する必要はありませんが、問題が何であるかはわかります。他のクラスのインスタンスを作成する
私は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の
EDITここ
一部
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger row = [indexPath row];
[[ClassB sharedInstance] showBtn:YES];
}
不可能なビューに 'showBtn'メソッドを追加しています。おそらく '[self.view addSubview:btn];を意味するでしょう。あまり秘密のない名前を使うと、それらの間違いを避けることができます。 – vadian
どのようにインスタンスを作成していますか? – Priyal
申し訳ありませんが、入力ミスでした。それはbtnです。私はここでそれらをより一般的にするために名前を簡略化しました –