2012-03-25 2 views
0

Итак, у меня есть UITableView, большой объем данных, который отображается со многими строками, и я хочу создавать разделы (например, приложение контактов по умолчанию и его разделы). Так что мой код (listViewController.m файл):Как реализовать разделы в представлении таблицы, содержащие базу данных SQLite?

#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 
+0

Хорошо, это ваш код. В чем проблема? – Matthias

+0

Я хочу сделать разделы в TableView, все примеры, которые я видел, не работают с SQlite, просто простыми NSarrays. Мне нужны разделы вроде «Еда», «Мясо», «Рыба» и т. Д., А не только первые буквы. – Necrosoft

+0

Что вы попробовали? Где проблема? Простое высказывание «дайте мне свой код» не работает в SO. – Matthias

ответ

0

С вашего кода вы должны иметь несколько секций (каждая из которых точно равны, чем другие). Идея для представления таблицы с несколькими разделами (обычно) имеет 2-мерный массив (не один размер, как ваш случай). Затем каждая строка будет представлять раздел для вашего вида таблицы.

Например, если у вас есть массив структурированную таким образом (и я знаю, что вы не можете инициализировать его таким образом):

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

Ваш номер метода сечений может возвращать [arr count] и количество строк для раздел s может вернуться [[arr objectAtIndex:s] count]. И помните, что вы можете установить заголовок для каждого раздела с помощью метода datasource таблицы вида tableView:titleForHeaderInSection:.

Если вы хотите загрузить информацию из базы данных SQLite, ничего не изменится. Это точно то же самое, но вам придется держать способ получить ваши данные.

Когда вы понимаете все это, тогда проверьте Core Data framework.

+0

Спасибо Ricard – Necrosoft

Смежные вопросы