如何在按钮单击中对单元格进行排序,在作为子视图添加到uiviewcontroller的tableView中?

时间:2012-08-28 21:01:06

标签: uitableview nssortdescriptor

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

我还有一个名为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;
}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

事实证明我做了一些让我失望的不必要的工作。我不需要对我的数组进行排序,然后重新加载我的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];
}