воскресенье, 4 октября 2015 г.

30 UITableView Dynamic Cells

Видео с уроком 29 находится  здесь.
В этом уроке рассмотрены таблицы UITableView с созданием ячеек динамически в коде.
Саму таблицу в данном уроке создают через сторибоард и делают аутлет tableView

@property (weak, nonatomic) IBOutlet UITableView *tableView;

Для динамического создания ячеек подписываем класс на протокол UITableViewDataSource:

@interface ViewController : UIViewController <UITableViewDataSource>

Для того, чтобы в коде сдвинуть таблицу (чтобы на залазить на строку с батареей и связью) используются смещения Inset:

    UIEdgeInsets inset=UIEdgeInsetsMake(20, 0, 0, 0);
    self.tableView.contentInset=inset;

    self.tableView.scrollIndicatorInsets=inset;

Для динамического создания таблицы переопределяем методы протокола UITableViewDataSource:

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

    NSLog(@"numberOfSectionsInTableView");
    return  [[UIFont familyNames] count];
    
}
Эта функция вызывается первой в ней мы возвращаем количество секций (групп ячеек) в таблице. В данном случае возвращается количество групп (Family Font) шрифтов.

Затем вызывается функция определяющая название заголовка (header) секции  (по её номеру):

- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    NSArray *familyNames=[UIFont familyNames];
    return familyNames[section];
    

}

В данном случае возвращается - устанавливается в качестве заголовка секции название категории (family) шрифта по номеру (section).

Затем вызывается функция определяющая количество строк в секции:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSLog(@"numberOfRowsInSection: Section= %@",@(section));
    
    NSArray *familyNames=[UIFont familyNames];
    NSArray *fontName=[UIFont fontNamesForFamilyName:familyNames[section]];
    return  [fontName count];

}
Возвращается количество шрифтов данной группы (family) .

Затем вызывается функция создания ячеек-строк:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"cellForRowAtIndexPath:indexPath:section %@,row %@",@(indexPath.section),@(indexPath.row));

// Для оптимизации затрат ресурсов, лучше не создавать каждый раз новый объект -ячейку, а использовать существующий

    static NSString *identifier=@"Cell";
    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

// Метод dequeueReusableCellWithIdentifier:identifier возвращает ссылку на ячейку UITableViewCell по индетификатуру, если ячейка создана и можно её использовать повторно



        NSLog(@"Cell Created");
    }
    else{
        NSLog(@"cell reused");
    }
    NSArray *familyNames=[UIFont familyNames];
    NSArray *fontNameArray=[UIFont fontNamesForFamilyName:familyNames[indexPath.section]];
    NSString *fontName=fontNameArray[indexPath.row];
    cell.textLabel.text=[NSString stringWithFormat:@"%@",fontName];

 // Установка текста ячейки и шрифта 
    
    UIFont *font = [UIFont fontWithName:fontName size:16];
    cell.textLabel.font=font;
    return  cell;

}


Исходный текст урока 29.

Домашнее задание к уроку 29:

Ученик.

1. Создайте таблицу которая содержит 1000 разных ячеек.
2. для каждой ячейки генирируйте радномный цвет.
3. RGB данные пишите в тексте ячейки, например: RGB(10,20,255)
4. Также раскрашивайте текст ячейки этим цветом.

Выполнено


Студент.

5. Теперь создайте класс, который содержит цвет и нейм.
6. В viewDidLoad сгенерируйте 1000 объектов такого класса по принципу из ученика
7. Положите их в массив и отобразите в таблице
8. В этом случае когда вы будете листать назад вы увидете те же ячейки, что там и были, а не новые рандомные

Выполнено




Мастер.

9. Возвращаемся к слудентам. Сгенерируйте 20-30 разных студентов.
10. В таблице создавайте не дефаулт ячейку а Value1. В этом случае у вас появится еще одна UILabel - detailLabel.
11. В textLabel пишите имя и фамилию студента, а в detailLabel его средний бал.
12. Если средний бал низкий - окрашивайте имя студента в красный цвет
13. Отсортируйте студентов в алфовитном порядке и отобразите в таблице

Супермен.

14. Средний бал для студентов ставьте рандомно от 2 до 5
15. После того, как вы сгенерировали 30 студентов вам надо их разбить на группы:
отличники, хорошисты, троечники и двоечники
16. Каждая группа это секция с соответствующим названием.
17. Студенты внутри своих групп должны быть в алфовитном порядке
18. Отобразите группы студентов с их оченками в таблице.

Mission Impossible!

19. Добавьте к супермену еще одну секцию, в которой вы отобразите 10 моделей цветов из задания Студент.
20. Помните, это должно быть 2 разных типа ячеек Value1 для студентов и Default для цветов.

Не забудьте показывать скриншоты!


Все задания выполнены







Комментариев нет:

Отправить комментарий