0

Storyboard を使用してアプリを作成するのは初めてです。カスタムセルで UITableView を作成しようとしています。IB でセルを作成し、カスタム tableViewCell クラスを作成しました (いくつかのラベルを追加し、適切なアウトレットを作成し、それらを IB で接続し、カスタム クラスを IB のカスタム セルに割り当てました)。

TableViewを担当するViewControllerで、データソース(いくつかの配列を持つdict)を作成し、すべての必須メソッドに入力します(UITableViewControlerと、テーブルビューのデリゲートおよびデータソースとして設定されたUIViewControllerの両方を試しました)

アプリを実行すると、テーブルビューは空です。そして、いくつかの NSLogging を実行した後、データ ソース メソッドが実行されていないことに気付きました。そして、私には理由がわかりません。

私は今、数時間これに夢中になっています。私を助けてください :)

コードやストーリーボード、またはその他のものを見る必要がある場合はお知らせください。

更新:さて、掘り下げた後、同じコードをテストすることにしましたが、NSMutableDictionary の代わりに NSMutableArray をデータ ソースとして使用することにしました。そしてそれはうまくいきます!さて、誰かが辞書でうまくいかなかった理由を説明してもらえますか?

これが何をしたかです。5 つの配列を持つ dict があり、各配列には 5 つの文字列がありました。

numberOfRowsForSection メソッドで [dict count] を返しました

cellForRowAtIndexPath メソッドでは、このコードを使用しました

NSArray * routeArray = [dealsDict objectForKey:@"route"];
cell.routeName.text = [routeArray objectAtIndex:indexPath.row];

NSArray * companyArray = [dealsDict objectForKey:@"company"];
cell.companyName.text = [companyArray objectAtIndex:indexPath.row];

NSArray * priceArray = [dealsDict objectForKey:@"price"];
cell.priceLabel.text = [priceArray objectAtIndex:indexPath.row];

NSArray * dateArray = [dealsDict objectForKey:@"date"];
cell.dateLabel.text = [dateArray objectAtIndex:indexPath.row];

NSArray * monthArray = [dealsDict objectForKey:@"month"];
cell.monthLabel.text = [monthArray objectAtIndex:indexPath.row];
NSLog(@"I'm in here");

return cell;

なぜ何も表示したくないのですか?

4

2 に答える 2

0

UITableViewには、データソースとしていくつかのコレクションデータセットが必要です。そのデリゲートメソッド「cellForRowAtIndexPath」が呼び出されるのは、コレクションの要素数(ARRAY)と同じです。numberOfRowsInSectionデリゲートのように、コレクション内のすべての要素に対してcellForRowAtIndexPathを呼び出す必要があることをテーブルビューに通知します。また、次の要素を読み取るたびにイテレータが必要です。ディクショナリの場合は、cellForRowAtIndexPathを呼び出すたびに常に同じデータ要素に固定されます。それがあなたにその働きのアイデアを与えることを願っています、あなたが何か他に知る必要があるならば私に知らせてください。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return [self.data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath
{
  MessagesCell *cell = [tableView dequeueReusableCellWithIdentifier:@"messageCellIdentifier"];

  Message *msg = [self.data objectAtIndex:indexPath.row];
  cell.Name.text = msg.Name;
  cell.Message.text = msg.MessageText;
  cell.Time.text = msg.Time;

  return cell;
}
于 2013-02-05T19:22:46.017 に答える
0

IB で、テーブル ビューを選択し、delegateおよびdataSourceアウトレットがコントローラーに設定されていることを確認します。

于 2013-02-05T18:23:09.493 に答える