0

したがって、オブジェクトのいずれかの値が > 0 であるかどうかに基づいて、プログラムで UIButton を作成しています。ただし、その値を編集してテーブルをリロードすると、ボタンが削除されません。ラベルに表示されているため、値は明らかに > 0 であり、nil ではありません。ボタンをすべてのセルに追加してから、その隠しプロパティを設定してみました。これにより、以下のコードと同じ動作が得られます。アプリを停止してアプリを再実行すると、どのように表示されるかが表示されます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect newIconRect = CGRectMake(280, 5, 33, 33);
    UIButton *warningButton = [[UIButton alloc] initWithFrame:newIconRect];
    warningButton.tag = 66;

    [cell.contentView addSubview:warningButton];
}

    UIButton *warningButton = (UIButton *)[cell.contentView viewWithTag:66];
    [warningButton setImage:[UIImage imageNamed:@"exclamation.png"] forState:UIControlStateNormal];
    [warningButton addTarget:self action:@selector(warningButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    if (ueo.daysLeft >= 0)
    {
    daysLeftLabel.text = [[NSString alloc]initWithFormat:@"%i recurringDays to go", ueo.daysLeft];

    warningButton.hidden = YES;

    }
    else
    {
    daysLeftLabel.text = [[NSString alloc]initWithFormat:@"%i recurringDays have passed", ueo.daysLeft];
    warningButton.hidden = NO;
    }
}
4

1 に答える 1

0

質問に示されているように実行している場合、セルに重複したボタンを作成しています。したがって、ボタン オブジェクトへの参照が既に失われている可能性があるため、ボタンを削除することはできません。リーチ リロードまたはテーブル ビュー スクロールの場合、上記のコードは新しいボタンを作成し、セルの上に追加します。

UITableViewCellこのボタンをカスタマイズしてinit、そのセル クラスのメソッドに追加することができます。その後、次を使用して表示/非表示を切り替えることができます

cell.button.hidden = YES;//or NO

簡単ですが推奨されない方法は、この部分を で行うことですif (cell == nil)

例:-

if (cell == nil) {
   //create cell here
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

   CGRect newIconRect = CGRectMake(280, 5, 33, 33);
   UIButton *warningButton = [[UIButton alloc] initWithFrame:newIconRect];
   warningButton.tag = 100;   
   [cell.contentView addSubview:warningButton];    
}

UIButton *warningButton = (UIButton *)[cell.contenView viewWithTag:100];
NSLog(@"warningButton = %@", warningButton);
[warningButton setImage:[UIImage imageNamed:@"exclamation.png"] forState:UIControlStateNormal];
[warningButton addTarget:self action:@selector(warningButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

if (ueo.daysLeft >= 0) {
  warningButton.hidden = YES;
} else {
  warningButton.hidden = NO;
} 
于 2012-12-10T23:16:24.950 に答える