2012-08-23 6 views
10

次のコードでは、[cell addSubview: someLabel][cell.contentView addSubview: someLabel]を同じにしているようです。いずれかの違いがありますか? UIView((実際のコードでカスタムセルはUIImageViewUILabelを追加している)、一方、contentViewを持っていないので、私たちはそのcontentViewにサブビューを追加する必要はありません。UITableViewCellは道によってUIViewのサブクラスであります)iOSでは、サブビューをUITableViewCellオブジェクト "cell"と "cell.contentView"の間に追加するのはどうですか?

-(UITableViewCell *) tableView:(UITableView *) tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = nil; 

    if ([tableView isEqual:self.songsTableView]){ 

     static NSString *TableViewCellIdentifier = @"MyCells"; 

     cell = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier]; 

     if (cell == nil){ 
      cell = [[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:TableViewCellIdentifier]; 
     } 

     // ... some code to create a UILabel (not shown here) 

     [cell addSubview: someLabel]; // vs using [cell.contentView addSubView: ...] 

答えて

10

私が間違っていないと思いますが、contentViewはUITableViewCellのサブビューです。

あなたが、その場合には、テーブルの編集モードを入力するまで、このページhereを見れば、あなたは私が、デフォルトではと思うのUITableViewCell

で3つのサブビューが実際にある見ることができ、編集コントロールが隠されています、編集コントロールが表示され(各行の左にあるマイナスボタン)、contentViewのサイズが変更されて右にプッシュされます。これはおそらく、他の答えに言及されている「適切なアニメーション」効果を与えるものです。

違いをテストするには、テキスト付きのUILabelなどのサブビューをcell.contentViewではなくセルに追加してみてください。 cell.contentViewではなくセルに追加してテーブルの編集モードを開始すると、UILabelのサイズが変更されないと思うので、編集ボタンをオンタップ/マイナス記号ボタンの下に表示します。

+0

はい私は他のセルの領域に干渉しない理由がわかりました...興味深いことに、私が 'contentView'を使用しても、削除アイコンは' Delete'ボタンを持ってきてコンテンツを隠すことができます区域 –

+0

とそれはアクセサリーの下にも表示されますが、たとえcontentViewが使われていてもコンテンツの領域を超えて何かを表示していることが原因である可能性があります。そして、コンテンツで 'x = 0'領域を編集し、 'x = -16'に変更すると、編集領域の削除アイコンの下にも表示されます。 –

2

contentViewにビューを配置すると、編集モードの適切なアニメーションに影響を与えます。サブクラス化していないときは、すべてのサブビューをcontentViewに配置します。これは、あなたが何をしているのか分からない限り、大部分の時間になるはずです。

関連する問題