В предыдущей части
я описывал как создавать таблицы внутри UIViewContrloller, простейшим
способом. Теперь поговорим о создании таблиц с большим количеством строк
и сложными механизмами их формирования. Как создать проект и разместить
UITableView описывать не буду можете посмотреть в предыдущей части. В
данном примере мы будем выводить большое количество данных в качестве
строк в таблицу. Для начала подправим наш h файл, если помните у меня
это попрежнему katalog.h вот как он будет выглядеть:
Релизация этого метода в m файле:
Конечно кажется что метод несколько замутный и излишне орудует массивами. Дело в том что именно этот способ подходит мне для дальнейшей работы с данными, если захотите его упростить то можете это делать.
Далее незабываем включить наш метод в метод viewDidLoad
Есть ещё один метод для формирования заголовков секций таблици, можете добавить его прямо в m файд:
#importНа самом деле я добавил только свойство listOfItems в качестве данных для него будет некий массив элементов в последствии строк. И добавил еще вспомогательный метод -(void) prepereList; – который будет готовить данные для выгрузки в таблицу, собственно наполнять listOfItems.
@interface katalog : UIViewController{
IBOutlet UITableView *table;
}
@property (strong,nonatomic)NSMutableArray* listOfItems;
-(void) prepereList;
@end
Релизация этого метода в m файле:
-(void) prepereList{Также не забудьте сделать @synthesize listOfItems;
NSMutableArray *marray = //предположим что такой массив данных у вас есть, если нет то можете воспользоватся любыми примерами по формированию данных этого типа
//создадим объект типа массив для ключей уже существующих значений из marray нашего массива данных строк
NSArray *keylist = [[NSArray alloc] initWithArray:marray];
//объявим наше свойство listOfItems.
listOfItems = [[NSMutableArray alloc] init];
NSDictionary *emDict = [NSDictionary dictionaryWithObject:keylist forKey:@"Sometext"]; //создадим ключ секцию и в качестве NSDictionary сохраним объект массив
//присвоим данные нашему списку элементов таблици
[listOfItems addObject:emDict];
}
Конечно кажется что метод несколько замутный и излишне орудует массивами. Дело в том что именно этот способ подходит мне для дальнейшей работы с данными, если захотите его упростить то можете это делать.
Далее незабываем включить наш метод в метод viewDidLoad
- (void)viewDidLoadНесколько изменятся методы по работе с таблицей относительно первой статье:
{
[super viewDidLoad];
[table setDelegate: self];
[table setDataSource: self];
[self prepereList];
}
#pragma mark – Table view data sourceНемного не понятно откуда берутся данные, но сама реализация направлена на то, что бы показать как вывести большое количество строк автоматически, а не на то как сформировать данные для таблицы. Так что уж простите что не акцентирую внимание на этом.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [listOfItems count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSDictionary *dictionary = [listOfItems objectAtIndex:section];
NSArray *array = [dictionary objectForKey:@"Sometext"];
NSLog(@»%d»,[array count]);
return [array count];
}
/*
Сформировать строки таблици
*/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @»Cell»;
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] ;
}
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSMutableArray *marray = [dictionary objectForKey:@"Sometext"];
NSDictionary *d = [marray objectAtIndex:indexPath.row];
NSString *code = [d valueForKey:@"code"];
cell.text = @»Maintext»;
UIFont *myFont = [ UIFont fontWithName: @"System" size: 17.0 ];
cell.textLabel.font = myFont;
cell.tag = 1;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.detailTextLabel.text = @»datail»;
return cell;
}
#pragma mark – Table view delegate
/*
Обработка событий нажатия на строки таблици
*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row==0 && indexPath.section==0){
//нажали на первую строку в первой секции
}else{
//нажали на другую строку
}
}
Есть ещё один метод для формирования заголовков секций таблици, можете добавить его прямо в m файд:
/**Вызов этого метода генерирует сам TableView, и искать его он будет в нашем классе, так как именно наш класс katalog.m – делегат таблици. В качестве входного параметра section используется номер секции, в данном примере у меня одна секция и проверять это значения смысла нет. Поэтому я просто верну название строкой. Можете скомпилировать проект и посмотреть как изменится вид таблици, над списокм появится заголовок.
заголовки секций
*/
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *sectioname = @»Заголовок»;
return sectioname;
}
Комментариев нет:
Отправить комментарий