3

解決:

解決策は、選択した回答で概説されているように、UITableView から適切に開始し、次に UIViewController に UITableView デリゲートを追加することから始めました。

序文: この件に関するほぼすべての記事を読みましたが、何のアドバイスも役に立ちませんでした。

UITableViewController の UITableView を UIViewController に埋め込んでいます。

ビューがレンダリングされない限り何も呼び出されないことを理解しているので、ビューをレンダリングし、NSLog を使用してそれらのメソッドにヒットしたことを示すことができます。

InterfaceBuilderでUITableViewControllerを作成し、サブクラスをカスタムクラスとして設定してみました!! しかし、それは私がそれを行う必要がある方法ではありません。これが私が集めた/行ったことです:

  • InterfaceBuilder を使用して UIViewController を管理していますが、プログラムで UITableView を追加しています
  • デリゲートと dataSource の両方が適切に設定され、self.tableView は nil ではありません
  • 有効なロギングにもかかわらず、cellForRowAtIndexPath は呼び出されず、レンダリングされた UITableView は空白です
  • デリゲートをコントローラーに追加しましたが、何も変更されませんでした

UITableViewController で次のように設定しました。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"%@", self.questions); // This outputs the questions array as not empty and works
    // As you can see I am also returning 1.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%d", [self.questions count]); // This outputs 4 as it should
    return [self.questions count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // All we need to focus on is this NSLog which never outputs
    NSLog(@"Was called and array is, %@" self.questions);

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    return cell;
}

私は多くの方法でビューを設定しようとしました: UITableViewController を直接追加する、UITableViewController の UITableView を追加する (これは正しい方法のようです) が、何も機能していません。

おそらく、InterfaceBuilder で作業するときに忘れていた主要な手順や、忘れていたランダムなことがあるでしょう。どんな助けでも大歓迎です。ありがとう!

**更新** UiTableViewControllerまたはUITavleViewのいずれかを追加する方法は次のとおりです

GTTableViewController *tvc = [[GTTableViewController alloc] initWithStyle:UITableViewStylePlain];
// Either
[self.view addSubview:tvc.view];
// OR
[self.view addSubview:tvc.tableView];
// Just to make sure everything is still ok.. and I see the 2/3 TV methods fire.
[self.tableView reloadData];
4

4 に答える 4

6

コードを分析する代わりに、テーブル ビューを .xml ファイルではないビュー コントローラーにプログラムで追加する方法の簡単な例を示しますUITableViewController。うまくいけば、これはあなたの問題を自分で解決するのに役立ちます.

.h ファイル内:

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
}
@end

.m ファイル内:

- (void) loadView
{
  CGRect mainViewFrame = CGRectMake(...);
  self.view = [[[UIView alloc] initWithFrame:mainViewFrame] autorelease];

  // You could make this even simpler if you set the table view as
  // your main view
  CGRect tableViewFrame = self.view.bounds;
  UITableView* tableView = [[[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain] autorelease];
  [self.view addSubview:tableView];

  tableView.delegate = self;
  tableView.dataSource = self;
}

それだけです。目を見張るものはありませんが、この単純なセットアップでは、UITableViewDataSourceデータ ソース メソッドが喜んでトリガーされるはずtableView:cellForRowAtIndexPath:です。少なくとも彼らはここで...

この例を使用して、自分の環境で機能させることをお勧めします。その後、ゆっくりと段階的に作り直して、希望するデザインにします。ある時点で物事が機能しなくなり、問題の原因がわかります。

于 2013-01-23T18:24:18.643 に答える
0

tableView のフレームは何ですか? で印刷できますNSLog(@"%@", NSStringFromCGRect(self.tableView.frame));。直感では、0,0,0,0 です。

于 2013-01-23T17:48:47.643 に答える
0

1 - numberOfRowsInSection が返す内容を確認します。値 > 0 を返しますか? (ばかげているように聞こえますが、私もそのような間違いを犯しました)

2 - IB で、テーブル ビューのセル タイプを確認します - 静的か動的か? static の場合、コードを調べません。

3 - 適切な場所で reloaddata を呼び出していますか?

4 - ビュー コントローラーのヘッダー ファイル (または宣言されている場所) で、デリゲート UITableViewDelegate および UITableViewDataSource から継承していますか?

于 2013-01-23T17:49:13.987 に答える