のカスタマイズされたサブクラスを作成するUITableViewCell
と、結果はプレーンスタイルの長方形のセルではうまくUITableView
機能しますが、グループ化されたスタイルのテーブルの丸みを帯びたセルではまったく機能しません。
UITableViewCell
グループ化されたスタイルのテーブルで機能するセルを描画するために確実にサブクラス化する方法はありますか?(Interface Builderを使用せずに。)
のカスタマイズされたサブクラスを作成するUITableViewCell
と、結果はプレーンスタイルの長方形のセルではうまくUITableView
機能しますが、グループ化されたスタイルのテーブルの丸みを帯びたセルではまったく機能しません。
UITableViewCell
グループ化されたスタイルのテーブルで機能するセルを描画するために確実にサブクラス化する方法はありますか?(Interface Builderを使用せずに。)
答えは、サブクラスのメソッド[super layoutSubviews]
内で最初に呼び出すのと同じくらい簡単でしょうか?UITableViewCell
layoutSubviews
これが私のコードです。
最初に を作成し、メソッドUITextField
の に追加します。contentView
initWithStyle:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
inputField = [[UITextField alloc] initWithFrame:CGRectZero];
[self.contentView addSubview:inputField];
inputField.borderStyle = UITextBorderStyleLine;
[inputField release];
}
return self;
}
次に、layoutSubviewsで、私はこれを持っています:
-(void)layoutSubviews
{
inputField.frame = CGRectMake(5, 5, 100, 20);
}
このコードでは、テキスト フィールドは画面の左から 5 ピクセルの位置にあり、グループ化モードの場合はもちろん、表のセルの左に 5 ピクセルです。つまり、テーブル ビュー セルの外側です。ダメ。
このコードを使用するとinputField
、セルの右側に 5px 配置されます。
-(void)layoutSubviews
{
[super layoutSubviews]; // the magic line
inputField.frame = CGRectMake(5, 5, 100, 20);
}
しかし、私はあなたが抱えていた問題を完全に誤解していたかもしれません!
エリック
以前はサブクラスで多くの問題を抱えていましUITableViewCell
たが、サブクラス化をやめました。contentView
のプロパティにサブビューを追加すると、UITableViewCell
私が遭遇したどのインスタンスでも同じことを達成するように見えるので、私は自分の中でそれを行うだけですUITableViewController
。
タイトルと値を持つ例を次に示します。
- (UITableViewCell *)tableView:(UITableView*)tableView
cellForRowAtIndexPath: (NSIndexPath*)indexPath
{
static NSString* CellIdentifier = @"AccountDetailsCell";
UILabel* mainLabel = nil;
UILabel* valueLabel = nil;
const CGFloat kAccountDetailFontSize = 14.0;
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if ( cell == nil )
{
cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault
reuseIdentifier: CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake( 10.0, 0.0, 150.0, 44.0 )] autorelease];
mainLabel.tag = MAINLABEL_TAG;
mainLabel.font = [UIFont boldSystemFontOfSize: kAccountDetailFontSize];
mainLabel.textAlignment = UITextAlignmentLeft;
mainLabel.textColor = [UIColor darkGrayColor];
mainLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
mainLabel.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview: mainLabel];
valueLabel = [[[UILabel alloc] initWithFrame: CGRectMake( 150.0, 0.0, 150.0, 44.0 )] autorelease];
valueLabel.tag = VALUELABEL_TAG;
valueLabel.font = [UIFont boldSystemFontOfSize: kAccountDetailFontSize];
valueLabel.textAlignment = UITextAlignmentRight;
valueLabel.textColor = [UIColor darkTextColor];
valueLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
valueLabel.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview: valueLabel];
}
else
{
mainLabel = (UILabel*)[cell.contentView viewWithTag: MAINLABEL_TAG];
valueLabel = (UILabel*)[cell.contentView viewWithTag: VALUELABEL_TAG];
}
mainLabel.text = (NSString*)kCellTitles[indexPath.section][indexPath.row];
valueLabel.text = [self tableView: tableView valueLabelTextForRowAtIndexPath: indexPath];
return cell;
}
私もこの問題に気づきました。私の回避策は、テーブル セルを小さくすることでした (320 ではなく 300 幅)。これは優れたソリューションではありませんが、うまく機能します。
「グループ化」モードの場合、テーブルビューのインセットを個別に削除できるとは思いません。私は間違っているかもしれません!
どのような問題がありますか? drawRect では、四角形が与えられ、合計サイズがわかっています - そのスペースに合わせてください。layoutSubviews を使用している場合も同じです。