1

我正在尝试UITableView使用NSMutableArray. 我希望数组中的每个元素都有自己的部分。ie :每个部分一个元素(一行)。

这是我到目前为止编写的代码。

#import "MailViewController.h"

@interface MailViewController ()

@end

@implementation MailViewController

NSMutableArray *mailboxes;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    mailboxes = [[NSMutableArray alloc] initWithObjects:@"Inbox", @"Drafts", @"Sent Items", nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return mailboxes.count;
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = [mailboxes objectAtIndex:indexPath.row];

    return cell;
}

@end

目前这是它的外观。

在此处输入图像描述

我怎样才能按照我上面描述的方式得到这个?(第一部分:收件箱,第二部分:草稿,第三部分:已发送邮件等)我已经接近了,但还没有完全到那里。

谢谢你。

4

4 回答 4

5

你应该改变:

cell.textLabel.text = [mailboxes objectAtIndex:indexPath.row];

cell.textLabel.text = [mailboxes objectAtIndex:indexPath.section];

这些行应该在cellForRowAtIndexPath:方法中。

您的数组索引应该基于部分而不是行。行始终固定为零。

于 2013-03-08T07:17:10.197 回答
1

代替

    cell.textLabel.text = [mailboxes objectAtIndex:indexPath.row];

    cell.textLabel.text = [mailboxes objectAtIndex:indexPath.section];
于 2013-03-08T07:17:52.787 回答
0

如果您还想要部分标题,请实现- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section并返回基于部分的字符串..

使用其他答案的代码,您将能够在每个部分中显示一个单元格。我更喜欢做的是拥有多维NSArray的预建单元格,当我需要它们时,它们位于 index 中[section][row]

您目前有一个只有部分的数组,并尝试将它们作为行访问(正如其他答案所建议的那样)。如果您在一个表组中有更多邮箱,则您的代码将不起作用..

于 2013-03-08T08:06:20.197 回答
-1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
    return [mailboxes count];
 }

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

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:CellIdentifier];
    }
      switch(indexpath.section){
             case 0:
              cell.textLabel.text = [mailboxes objectAtIndex:indexPath.section];
              case 1:
               cell.textLabel.text = [mailboxes objectAtIndex:indexPath.section];
               case 2:
               cell.textLabel.text = [mailboxes objectAtIndex:indexPath.section];
                default:
                 break;
             }
   return cell;
 }
于 2013-03-08T08:16:46.813 回答