5

作成したheaderView.xibを表示するUITableViewを取得しようとしていますが、ビルドした後、何も表示されません。UITableViewを編集可能にし、ItemsViewController.mファイルに3つのメソッドを追加したいのですが、何も表示されません。

どうしたの?前もって感謝します。

関連するファイルは次のとおりです。

ItemsViewController.h

#import <Foundation/Foundation.h>

@interface ItemsViewController : UITableViewController
{
  IBOutlet UIView *headerView;
}

-(UIView *)headerView;
-(IBAction)addNewItem:(id)sender;
-(IBAction)toggleEditingMode:(id)sender;

@end

ItemsViewController.m

#import "ItemsViewController.h"
#import "BNRItemStore.h"
#import "BNRItem.h"

@implementation ItemsViewController // Incomplete implementation

-(id)init
{
  // Call the superclass's designated initializer
  self = [super initWithStyle:UITableViewStyleGrouped];
  if (self) {
    for(int i = 0; i < 5; i++) {
      [[BNRItemStore sharedStore]createItem];
    }

  }
  return self;
}

-(id)initWithStyle:(UITableViewStyle)style
{
  return [self init];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return [[[BNRItemStore sharedStore]allItems]count];
}

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


  // Check for a reusable cell first, use that if it exists
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];

  // If there is no reusable cell of this type, create a new one
  if (!cell) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
  } 

  // Set the text on the cell with the description of the item
  // that is at the nth index of items, where n = row this cell
  // will appear in on the tableview
  BNRItem *p = [[[BNRItemStore sharedStore]allItems]objectAtIndex:[indexPath row]];

  [[cell textLabel]setText:[p description]];

  return cell;
}

-(UIView *)headerView
{
  // If we haven't loaded the headerView yet
  if (!headerView) {
    //Load HeaderView.xib
    [[NSBundle mainBundle]loadNibNamed:@"HeaderView" owner:self options:nil];
  }
  return headerView;
}

-(UIView *)tableView:(UITableView *)tv viewForHeaderInSection:(NSInteger)sec
{
  return [self headerView];
}

-(CGFloat)tableView:(UITableView *)tv heightForHeaderInSection:(NSInteger)sec
{
  // The height of the header view should be determined from the height of the 
  // view in the XIB file
  return [[self headerView]bounds].size.height;
}



@end
4

4 に答える 4

3

次のいずれかまたは両方が正しく設定されていません。まず、HeaderView.xibのファイルの所有者オブジェクトのクラスをに設定する必要がありますItemsViewController。その後、headerViewアウトレットをファイルの所有者からxibのトップレベルビューに接続する必要があります。

于 2012-04-29T21:48:23.387 に答える
3

同じ問題が発生し、コメント//LoadHeaderView.xibの下のコード行を次のように変更することで解決しました

// Load HeaderView.xib
    headerView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil] lastObject];

nibファイルにはビューが1つしかないため、最後の(のみ)ビューを割り当てます。

お役に立てれば。

于 2012-07-31T09:45:11.033 に答える
0

loadNibNamedメソッド内のメソッドがnibファイルの内容の配列を返すことは重要なようですheaderViewが、それらの内容については何もしていません。アーカイブされていないオブジェクト内のビューを見つけてheaderView、nibファイル内から対応するビューに設定する必要があるかもしれません。

于 2012-04-29T19:28:43.537 に答える
0

これらのメソッドの実装を見逃しましたか?これらのクラスがすでにデフォルトのセクション値=1に設定されているかどうかはわかりません。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
于 2012-04-29T19:34:34.267 に答える