UITableViewCell
コードにボタンを動的に配置するカスタムs を作成しました。そのようなボタンのアクションをプログラムで設定しました。アクションがトリガーされたら、特にテーブルをリロードする必要があります。リロードが呼び出されると、送信者ボタンが消え、理由がわかりません...誰かが考えられる理由のヒントを教えてくれませんか? ボタンがタップされず、テーブルを上下にスクロールすると、そこに残ります。
ありがとう!
編集
これは からのコード スニペットですcellForRowAtIndexPath
。
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *listData =[self.tableViewEntries objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];
UITableViewCell *cell;
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0: {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"firstCell"];
((CustomCell *)cell).cellTextField.tag = firstCellTag;
cell.tag = firstCellTag;
break;
}
case 1: {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"secondCell"];
((CustomCell *)cell).cellTextField.tag = secondCellTag;
cell.tag = secondCellTag;
break;
}
}
return cell;
}
CustomCell
私が定義した は からロードされますnib
。これらのセルには、UITextField
ユーザー入力用の とUIView
、テキスト フィールド内のユーザー入力に従って、コードでボタンを動的に設定または削除する場所があります。ボタンはコードで作成され、そのアクションもコードで設定されます。
- (void)setButtonForCell:(UITableViewCell *)cell withResult:(BOOL)isValid
{
UIImage* validationButtonNormalImage = nil;
UIImage* validationButtonHighlightImage = nil;
UIButton *validationButton = [UIButton buttonWithType:UIButtonTypeCustom];
[validationButton setFrame:CGRectMake(0, 0, ((CustomCell *)cell).cellValidationView.frame.size.width, ((CustomCell *)cell).cellValidationView.frame.size.height)];
if (isValid) {
validationButtonNormalImage =[[UIImage imageNamed:@"success.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
validationButtonHighlightImage =[[UIImage imageNamed:@"success.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
[validationButton removeTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
}
else {
validationButtonNormalImage =[[UIImage imageNamed:@"error.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
validationButtonHighlightImage =[[UIImage imageNamed:@"error.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
[validationButton setTag:cell.tag];
[validationButton removeTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
[validationButton addTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
}
[validationButton setBackgroundImage:validationButtonNormalImage forState:UIControlStateNormal];
[validationButton setBackgroundImage:validationButtonHighlightImage forState:UIControlStateHighlighted];
[((CustomCell *)cell).cellValidationView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
[((CustomCell *)cell).cellValidationView addSubview:validationButton];
}
次に、 でvalidationButtonTapped:
いくつかのタスクを実行して を呼び出し[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:NO];
、ビューからボタンを外したときがあります。ただし、ボタンをタップせずに上下にスクロールして「cellForRowAtIndexPath:」を再度呼び出すと、ボタンはここに残ります。リロードを要求するときだけそれを失うようなものです。
何か助けはありますか?