0

所以首先我会提供一些背景信息,这样你就可以完全理解我的问题。我花了几个小时寻找解决方案,但似乎仍然无法正确解决。因此,我正在尝试创建一个将 tableView 作为子视图加载到 uiviewcontroller (SubviewPracticeMasterViewController) 的应用程序。表视图在另一个 uiviewcontroller(SubviewPracticeViewController) 上进行子类化,并作为 uiview 加载到 SubviewPracticeMasterViewController 上。

我还有一个名为 LeadsInformation 的 NSObject。LeadsInformation.h 看起来像这样

#import <Foundation/Foundation.h>

@interface LeadsInformation : NSObject

@property (nonatomic, copy)NSString *leadName;
@property (nonatomic, copy)NSString *lastName;
@property (nonatomic, copy)NSString *firstName;
@property (nonatomic, copy)NSString *areaCode;
@property (nonatomic, copy)NSString *phoneNumber;
@property (nonatomic, copy)NSString *status;
@property (nonatomic, copy)NSString *notes;


-(id)initWithName: (NSString *)leadName lastName: (NSString *)lastName firstName:      (NSString *)firstName
     areaCode: (NSString *)areaCode phoneNumber: (NSString *)phoneNumber status: (NSString *)status 
        notes: (NSString *)notes;

@end

因此,在 SubviewPracticeViewController.m 上,我以编程方式将 4 个 LeadsInformation 对象添加到名为“dataArray”的数组中,并将特定字符串值加载到我的 cellForRowAtIndexPath 方法中的自定义单元格中。

现在这是我的问题发生的地方。我还从 xib 文件加载自定义标头。标题上有两个按钮:我希望第一个按钮根据第一列按字母顺序对单元格进行排序,我希望第二个按钮根据单元格的第二列按字母顺序对单元格进行排序。

表格视图完全按照我的意愿显示,自定义表格标题也是如此,并且正在单击按钮。但是,单元格没有得到排序。我已将用于按 IBAction 方法中的第一列排序的代码与标题上的按钮相关联。这是代码:

- (IBAction)sortLeadName:(id)sender {
    NSSortDescriptor *leadNameDescriptor = [[NSSortDescriptor alloc] initWithKey:    @"leadName" ascending:YES selector:@selector(localizedStandardCompare:)];
    NSArray *sortDescriptor = [NSArray arrayWithObject:leadNameDescriptor];
    NSArray *sortedArray = [self.dataArray sortedArrayUsingDescriptors:sortDescriptor];

    self.dataArray = [[NSMutableArray alloc] initWithArray:sortedArray];
    [[self tableView] reloadData];

}

这是 cellForRowAtIndexPath 的代码,以防万一:

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

    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"Identifier"];
    if (cell == nil) {

        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    LeadsInformation *leadAtIndex = [self.dataArray objectAtIndex: indexPath.row];

    UILabel *label;
    label = (UILabel *)[cell viewWithTag:1];
    label.text = leadAtIndex.leadName;

    label = (UILabel *)[cell viewWithTag:2];
    label.text = leadAtIndex.status;

    return cell;
}

任何帮助将不胜感激。谢谢!

4

1 回答 1

2

所以事实证明我做了一些让我失望的不必要的工作。我不需要对数组的副本进行排序,然后将我的 dataArray 重新加载为新的排序副本。我只需要使用 SortDescriptor 直接对数组进行排序,如下所示:

-(IBAction)sortLeadName:(id)sender {
    NSSortDescriptor *sortDescript = [[NSSortDescriptor alloc] initWithKey:@"status"  ascending: YES selector:@selector(localizedStandardCompare:)];

    [self.dataArray sortUsingDescriptors: [NSArray arrayWithObject: sortDescript]];
    [self.tableView reloadData];
}
于 2012-09-18T20:03:24.970 回答