5

10個の静的セルを含むテーブルがあるとします。プログラムで特定のセルを選択する方法はありますか?

私はこれを試しました

UITableViewCell *cell = [self.tableView.subviews objectAtIndex:indexPath.row];

しかし、それは実際には表のセルを返さないようです。

これは私のコードをクラッシュさせるようです

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

コードで静的セルの個々の高さを設定しようとしています。オプションは、個々の静的セルごとにコンセントを作成することですが、それはばかげているようです。

4

6 に答える 6

16

静的に作成されたセルにアクセスするには、次を試してください。

UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

これは静的セルで機能します。だから、あなたがいるなら...

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

     UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    return cell;

}

...デリゲート、上記の宣言を使用して、静的に構成されたすべてのセルにアクセスできます。そこから、「セル」でやりたいことを何でもできます。

2 つの UITableView を持つ ViewController がありました。そのうちの 1 つはストーリーボードを使用して静的に定義されたセルを持ち、もう 1 つはコードを使用して動的に定義されたセルを持っていました。両方のテーブルのデリゲートとして同じ ViewController を使用していた場合、セルが既に作成されている場所で cellForRowAtIndexPath が呼び出されている場所で新しいセルが作成されないようにする必要がありました。

あなたの場合、セルへのプログラムによるアクセスを取得する必要があります。

楽しむ。

于 2013-03-07T17:03:53.640 に答える
1

セル オブジェクトにアクセスする必要がある場合は、UITableViewCell メソッドの cellForRowAtIndexPath を使用するのが適切です。

表示されている場合はセルを渡すか、提供する必要があるデリゲートメソッド cellForRowAtIndexPath (それらを混同しないでください) を呼び出します。それがクラッシュした場合は、さらに深く掘り下げて、クラッシュの根本原因を調査します。

于 2013-02-06T11:01:03.260 に答える
1

あなたはこれを試すことができます...

UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowvalue inSection:0]];
于 2013-02-06T10:54:58.053 に答える
0

これは Swift 2.3 です。解決。

UITableViewController は IB で作成されます。

/*
    NOTE
    The custom static cells must be
    In the IB tableview if one is being used 
    They also must be updated to be MYCustomTableViewCell 
    instead of UITableViewCell
*/
import UIKit

class MYCustomTableVC: UITableViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
        // NO Nib registration is needed
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath) as! MYCustomTableViewCell
        // MYCustomTableViewCell can be created programmatically 
        // without a Xib file 
        return cell
    }
}
于 2016-10-04T15:54:47.963 に答える
0

使用table view delegate方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSInteger height;  
     if(0 == indexPath.row)  
       {
          height = 44;
       }
     else
      {  
        height = 50;
      }
   return height;
}
于 2013-02-06T10:43:12.753 に答える