5

我试图让 UITableView 显示我创建的 headerView.xib,但是在构建它之后,什么都没有显示。想让 UITableView 可编辑,并在 ItemsViewController.m 文件中添加了三个方法,但没有显示。

怎么了?提前致谢。

以下是相关文件:

ItemsViewController.h

#import <Foundation/Foundation.h>

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

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

@end

项目视图控制器.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

我遇到了同样的问题,并通过将注释//Load HeaderView.xib 下的代码行更改为

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

nib 文件只有一个视图,因此我将其分配为最后一个(唯一)视图。

希望这可以帮助。

于 2012-07-31T09:45:11.033 回答
3

以下一项或两项设置不正确。首先,HeaderView.xib 中的 File's Owner 对象需要将其类设置为ItemsViewController. 之后,headerViewoutlet 需要从 File's Owner 连接到 xib 中的顶层视图。

于 2012-04-29T21:48:23.387 回答
0

loadNibNamed您的方法内部的方法返回 nib 文件内容的数组似乎很重要headerView,但您对这些内容没有做任何事情。也许您应该在未归档的对象中找到视图,并headerView从 nib 文件内部将您的视图设置为相应的视图。

于 2012-04-29T19:28:43.537 回答
0

您是否错过了实施这些方法?我不确定这些类是否已设置默认部分值 = 1。

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