カレンダー アプリの [イベントの削除] ボタンに相当するものを作成するために、別のアプローチを取りました。ボタンをサブビューとして追加するのではなく、セルに 2 つの背景ビュー (赤と濃い赤、素敵なグラデーション) を追加し、角を丸めて境界線を灰色に設定しました。
以下のコードは、再利用可能なセルを (通常の方法で) 作成します。参照されている 2 つの画像 (「redUp.png」と「redDown.png」) は、カレンダーの「イベントの削除」ボタンのスクリーンショットから取得されました。(これは、プログラムでグラデーションを作成するよりも速いようです。) カレンダーの「イベントの削除」の外観にさらに近づけるために、もう少し微調整する余地がありますが、これはかなり近いものです。
ボタンのアクションは、tableView デリゲート メソッド tableView:didSelectRowAtIndexPath: メソッドによってトリガーされます。
// create a button from a table row like the Calendar's 'Delete Event' button
// remember to have an #import <QuartzCore/QuartzCore.h> some above this code
static NSString *CellWithButtonIdentifier = @"CellWithButton";
UITableViewCell *cell = [self dequeueReusableCellWithIdentifier:CellWithButtonIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellWithButtonIdentifier] autorelease];
[[cell textLabel] setTextAlignment: UITextAlignmentCenter];
UIImageView* upImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"redUp.png"]];
UIImageView* downImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"redDown.png"]];
[cell setBackgroundView: upImage];
[cell setSelectedBackgroundView: downImage];
[[upImage layer] setCornerRadius:8.0f];
[[upImage layer] setMasksToBounds:YES];
[[upImage layer] setBorderWidth:1.0f];
[[upImage layer] setBorderColor: [[UIColor grayColor] CGColor]];
[[downImage layer] setCornerRadius:8.0f];
[[downImage layer] setMasksToBounds:YES];
[[downImage layer] setBorderWidth:1.0f];
[[downImage layer] setBorderColor: [[UIColor grayColor] CGColor]];
[[cell textLabel] setTextColor: [UIColor whiteColor]];
[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[cell setBackgroundColor:[UIColor clearColor]]; // needed for 3.2 (not needed for later iOS versions)
[[cell textLabel] setFont:[UIFont boldSystemFontOfSize:20.0]];
[upImage release];
[downImage release];
}
return cell;