テーブルビューの各UITableViewCell(2つのセルを除く)に追加されるUIButtonがあります。 ボタンのターゲットはUITableViewControllerです。 私は、アクションが間違ったターゲットに送信されたときにアプリケーションがクラッシュしたことに気付きました。私は、これは、ターゲットが何らかの方法で割り当て解除されたためだと仮定しています(たとえ、UITableViewControllerの割り当てが解除されていても、ボタンが表示されず、押されてはいけません。UIButtonのターゲットアクションの削除
私は、addTargetメソッドとremoveTargetのバランスをとる必要があると思います。 KVOのように、保持/解放する。
しかし、ボタンを作成してセルに追加したときのボタンへの参照しかないので、どこでこれを行うのかはわかりません。cellForRowAtIndexPath:
?あなたはこのためにUIButtonをサブクラス化しているか、あなたは、細胞やボタンの割り当てが解除されたときにボタンのターゲットアクションを削除するには、そこにコードを置くことができるのUITableViewCellをサブクラス化している場合は
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
UIButton *extraButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[extraButton setFrame:CGRectMake(0, 0, 60, 30)];
[extraButton setTitle:@"Meta" forState:UIControlStateNormal];
[extraButton addTarget:self action:@selector(extraButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = extraButton;
}
if (indexPath.row == kNoExtraButtonRow) {
cell.accessoryView.hidden = YES;
} else {
cell.accessoryView.hidden = NO;
}
//set textlabels etc...
return cell;
}
細胞を助けるだろうと思い、ちょうどサブクラスではないのUITableViewCellです。ボタンは寿命が短いはずですが、エラーが出たら混乱しました。私はペン先を使用していません。誤って複数のUI要素のインスタンスを作成したことが何を意味するのかよく分かりません。複数のセルがあるので、複数のインスタンスを作成する必要があります。私は自分の質問にコードを追加します。 –
上記のコードが正しいように見えます。実際のクラッシュ情報を掲載することができます。 –
'main'メソッドでスタックトレースが停止しているので、スタックトレースはそれほど役に立ちません。例外は: - [_ UIResizableImage extraButtonPressed:]:インスタンス0x31c480に送られたセレクタが認識できませんでした。そして、これは、ボタンを含むテーブルビューの後、画面から消えていたので(ボタンに触れることはできませんでした) –