私は次の前提を持つ単純なアプリに取り組んでいます:
- プラス ボタン付きの TableViewController - ユーザーが押すと、名前、タイトルなどを表すために入力するテキスト フィールドがモーダルに表示されます。保存を押すと、View Controller が消え、それらのエントリが Core Data データベースに追加され、エントリが表示されます。テーブルビューで。
サブタイトルなどの標準セルでこれをうまく機能させました。NSFetchedResultsController を使用しており、カスタム セルを展開したいと考えています。
スタイルをストーリーボードのカスタム セルに変更し、名前、タイトル、金額 (ユーザーが追加) を表す 3 つのラベルを追加しました。
UITableViewCell のカスタム クラスを作成し、このテーブル ビュー セルがそのカスタム参照クラスであることを確認しました。ラベルのプロパティを追加しました: nameLabel、amountLabel、titleLabel。
このクラスを完全な TableViewController クラスにインポートしました。オンラインのチュートリアルに従って、基本的に cellForRowAtIndexPath メソッドを次のように使用するだけであると述べています。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"TableCellID";
TableCell *tablecell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
NSDictionary * dict = [self.tweetsArray objectAtIndex:indexPath.row];
tablecell.title.text = [dict objectForKey:@"tweet"];
UIImage *imageIcon = [UIImage imageNamed:[dict objectForKey:@"image"]];
[tablecell.cellImage setImage:imageIcon];
return tablecell;
}
それは私のコードではありませんが、 http://www.codigator.com/tutorials/ios-uitableview-tutorial-custom-cell-and-delegates/から参照されていますが、概念は同じです。
私は NSFetchedResultsController を使用しているため、実際にはセルに対して 2 つのメソッドがあります。
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
Transaction *transaction = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.nameLabel.text =[NSString stringWithFormat:@"%@", transaction.name];
cell.amountLabel.text = [NSString stringWithFormat:@"%@", transaction.amount];
cell.eventLabel.text = [NSString stringWithFormat:@"%@", transaction.title];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"People";
TransactionCell *cell = (TransactionCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Set up the cell...
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
nameLabel、amountLabel が実際には認識されないため、このコードは機能しません。
(上のコードのように) すべての情報を cellForRowAtIndexPath に入れましたが、
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
メソッドには次のエントリがあるためです。
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
のメソッドシグネチャを変更しようとしました
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
することが:
- (void)configureCell:(TransactionCell *)cell atIndexPath:(NSIndexPath *)indexPath {
しかし、それは私には正しくないようで、警告があります。
基本的に、私は複雑なことを達成しようとはしていません。3 つのラベルを持つカスタム セルを作成しようとしているだけです。なぜ cellForRowAtIndexPath の「セル」が configureCell メソッドで認識されないのですか?
最後に、カスタム セルには特定のサイズがあり、通常より大きく、アプリの実行時には表示されません。それは正常なままです。セルのインスペクタでこれを行いましたが、テーブルビュークラスの最後に次のコードも追加しました:
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
tableView.rowHeight = 80;
}
しかし、それは通常の高さのままでした。
これに関するご支援をいただければ幸いです。
ありがとう、