0

如果我只返回 1 行单元格,这将非常有效。但是,如果我输入超过 1 个,我会收到错误消息:“索引 1 超出范围 [0 .. 0]”

我制作了一个 xib 文件,其中包含一个具有独特设计的表格单元格,我只想一遍又一遍地使用它,只更改一些标签。我会以错误的方式解决这个问题吗?

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        // Uncomment the following line to preserve selection between presentations.
        // self.clearsSelectionOnViewWillAppear = NO;

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    #pragma mark - Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {

        // Return the number of sections.
        return 1;
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {

        // Return the number of rows in the section.
        return 2;
    }


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"Cell";

        SectionCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil)
        {


            NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"ButtonCell" owner:self options:nil];

cell = [[SectionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

            cell = (SectionCell *)[nib objectAtIndex:0];

        }


        cell.backgroundView.layer.masksToBounds = YES;
        cell.backgroundView.layer.cornerRadius = 20.0;

        cell.name.text=@"Cell Test";


        tableView.backgroundView = nil;
        tableView.backgroundColor = [UIColor clearColor];
        return cell;
    }

    /*
    // Override to support conditional editing of the table view.
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Return NO if you do not want the specified item to be editable.
        return YES;
    }
    */


    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 78;
    }
4

3 回答 3

1

而不是使用:

cell = [nib objectAtIndex:indexPath.row];

采用:

if (cell == nil) {
    NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"ButtonCell" owner:self options:nil];
    cell = (SectionCell *)[nib objectAtIndex:0];

}

因为您的笔尖可能只有一个对象,即您的自定义表格视图单元格。

PS:假设您有一个名为“ButtonCell”的xib,它有一个自定义视图,其自定义类设置为“SectionCell”

于 2013-02-06T19:17:28.590 回答
1

更改此代码:

if (cell == nil)
    cell = [[[SectionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier] autorelease];

并删除您的 NSBundle 逻辑,因为您自己正在实例化单元对象,因此不再需要它。

例子:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"Cell";
        SectionCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if (cell == nil)
            cell = [[[SectionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier ] autorelease];

        cell.backgroundView.layer.masksToBounds = YES;
        cell.backgroundView.layer.cornerRadius = 20.0;
        cell.name.text=@"Cell Test";
        tableView.backgroundView = nil;
        tableView.backgroundColor = [UIColor clearColor];
        return cell;
    }

提示:

没有必要按照您的方式连续设置您的表格视图背景。您可以在首次加载对象时设置它。

于 2013-02-06T20:15:31.007 回答
0

找到了答案。我必须不使用静态表视图并使用动态原型。唯一的缺点是我不能使用自定义 xib 单元格,必须修改默认单元格以使其看起来尽可能接近我的静态单元格。

于 2013-02-06T21:23:44.987 回答