如何在包含SQLite数据库的表视图中实现节?

时间:2012-03-25 18:37:53

标签: iphone objective-c uitableview

所以,我有UITableView,大量数据显示有很多行,我想制作部分(如默认联系人应用程序及其部分)。所以有我的代码(listViewController.m文件):

#import "FailedBanksListViewController.h"
#import "FailedBankDatabase.h"
#import "FailedBankInfo.h"
#import "FailedBanksDetailViewController.h"
#import "BIDAppDelegate.h"

@implementation FailedBanksListViewController
@synthesize failedBankInfos = _failedBankInfos;
@synthesize details = _details;


- (void)viewDidLoad {

    self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"3.png"]];;
    [super viewDidLoad];
    self.failedBankInfos = [FailedBankDatabase database].failedBankInfos;
    self.title = @"Продукты";
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.failedBankInfos = nil;
    self.details = nil;

}
- (void) viewWillAppear:(BOOL)animated
{


}

#pragma mark Table view methods

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

    return [_failedBankInfos count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [_failedBankInfos count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }


    // Set up the cell...
    FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
    cell.textLabel.text = info.name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", info.city, info.state];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.details == nil) {
        self.details = [[FailedBanksDetailViewController alloc] initWithNibName:@"FailedBanksDetailViewController" bundle:nil];        
    }
    FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
    _details.uniqueId = info.uniqueId;
    [self.navigationController pushViewController:_details animated:YES];
}

- (void)dealloc {
    self.failedBankInfos = nil;
}


@end

1 个答案:

答案 0 :(得分:0)

使用您的代码,您应该有多个部分(每个部分与其他部分完全相同)。 多部分表视图的想法(通常)具有2维数组(不像您的情况那样是1维)。然后每行代表一个表视图的部分。

例如,如果你有一个以这种方式构造的数组(我知道你不能用这种方式初始化它):

arr = {
  {'apple','orange','banana'},
  {'CD-Rom', 'DVD', 'BR-Disk'},
  {'AK-47', 'Rocket launcher', 'Water gun'}
}

您的部分数量方法可能会返回[arr count],而部分s的行数可能会返回[[arr objectAtIndex:s] count]。请记住,您可以使用表视图数据源方法tableView:titleForHeaderInSection:为每个部分设置标题。

如果要从SQLite DB加载信息,则不会发生任何变化。它完全相同,但你必须保持获取数据的方式。

如果您了解所有这些内容,请查看Core Data framework