0

1つのビューに3つのテーブルビューがあり、なぜtableView:cellForRowAtIndexPath:呼び出されなかったのか疑問に思いました。

 #pragma mark -
 #pragma mark <UITableViewDelegate>
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
    if (tableView == self.mainVoucherTableViewController)
       [self setSelectedIndex:indexPath.row];
 }

 - (NSInteger)tableView:(UITableView *)tableView
   numberOfRowsInSection:(NSInteger)section
 {
    if (tableView == self.mainVoucherTableViewController){
  return 10;
     }
 }

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    if (tableView == self.mainVoucherTableViewController){
    static NSString *MyIdentifier = @"MyReuseIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:MyIdentifier];
    }

    cell.textLabel.text = @"THISTEXT";
    return cell;
   }
}


 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

 if (tableView == self.mainVoucherTableViewController)
     return 1;
 }

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
// The header for the section is the region name -- get this from the region at the section index.
if (tableView == self.mainVoucherTableViewController){
    NSString * myString = [NSString stringWithFormat:@"HELLLO WORLD"];
    return myString;
  }
}

なぜこれなのか誰か知っているだろうか?基本的に、これはセルを作成したり、セルを表示したりしません。テーブルビューを表示するだけです。:(

4

5 に答える 5

1

上記のいくつかのことを統合するだけです。

  1. あなたの命名から、あなたのtableViewはmainVoucherTableViewControllerと呼ばれます-これが実際にUITableViewであり、UITableViewControllerではないことを確認したいだけですか? それがUITableViewControllerの場合、残りの部分は明らかな理由で機能しません(またはそれほど明白ではない-私に知らせて、さらに説明してください)

  2. 以下のコードを使用するか、XIB を使用している場合は Interface Builder で、現在の viewController を tableView のデリゲートおよび dataSource として設定していることを確認してください。

    self.mainVoucherTableViewController.delegate = self;
    self.mainVoucherTableViewController.dataSource = self;
    
  3. numberOfRowsInSection 関数が呼び出されていること、およびゼロ以外を返していること (NSLogs に入れるなど) を確認し、numberOfSections についても同じことを行います (実際には、1 つのセクションのみを使用している場合、numberOfSections は必要ありません) - を参照してください。 UITableViewDataSource プロトコル リファレンス: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

  4. 以前の投稿に従って、最初に cellForRow をログに記録し (ポイント #1-3 がチェックされ、機能している場合)、それがトリガーされていることを確認し、リターンの直前に記録します。また、返すセルの NSLog を実行して、それが nil でないことを確認します。

于 2012-10-11T19:45:00.200 に答える
1

メソッドの内部にログインtableView:cellForRowAtIndexPath:して、問題を絞り込むのに役立つように、if ステートメントの外部と内部で呼び出されるかどうかを確認することから始めます。

また、比較する代わりに試してください:

tableView == self.mainVoucherTableViewController

代わりに、タグ値を持つように tableViews を設定します。次に、次のことができます。

if(tableView.tag == 100){ // tag number we assigned self.mainVoucherTableViewController via IB
    //do your stuff here
}
于 2012-10-11T18:18:34.280 に答える
-1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if (tableView == self.mainVoucherTableViewController)
    {
       return 10;
     }
      else
     {retun 5;
     }
   }

最初のテーブル 10 の行を表示し、2 番目のテーブルは 5 行を表示します。

于 2013-03-02T11:48:12.243 に答える
-1

インスタンス宣言の順序は重要です。たとえば、次の ivar があるとしtableViewます。

違う

self.tableView.delegate = self;
self.tableView = [UITableView alloc] init];

正しい

self.tableView = [UITableView alloc] init];
self.tableView.delegate = self;
于 2013-10-29T10:44:24.620 に答える
-2

UITableViewオブジェクトのフレームサイズを確認してください。フレームサイズがセルを描画するのに十分でない可能性があります。

于 2015-04-29T06:22:26.267 に答える