Интуит. Разработка приложений для iOS. Лекция 5. Сложные...
Transcript of Интуит. Разработка приложений для iOS. Лекция 5. Сложные...
![Page 2: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/2.jpg)
Вспомним прошлое занятие
![Page 3: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/3.jpg)
С помощью какого контроллера осуществляется навигация?
![Page 4: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/4.jpg)
С помощью какого контроллера осуществляется навигация?
UINavigationController
![Page 5: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/5.jpg)
Как показать контроллер, чтобы он выехал снизу вверх?
![Page 6: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/6.jpg)
Как показать контроллер, чтобы он выехал снизу вверх?
[self presentViewController:vc animated:YES completion:nil];
![Page 7: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/7.jpg)
Как добавить кнопку в navigation bar справа?
![Page 8: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/8.jpg)
Как добавить кнопку в navigation bar справа?
self.navigationItem.rightBarButtonItem = …
![Page 9: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/9.jpg)
Как задается картинка контроллера в таббаре?
![Page 10: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/10.jpg)
Как задается картинка контроллера в таббаре?
self.tabBarItem.image = …
![Page 11: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/11.jpg)
Сложные Views
![Page 12: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/12.jpg)
UITableView
![Page 13: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/13.jpg)
![Page 14: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/14.jpg)
![Page 15: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/15.jpg)
![Page 16: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/16.jpg)
![Page 17: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/17.jpg)
![Page 18: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/18.jpg)
![Page 19: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/19.jpg)
![Page 20: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/20.jpg)
![Page 21: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/21.jpg)
![Page 22: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/22.jpg)
![Page 23: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/23.jpg)
![Page 24: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/24.jpg)
![Page 25: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/25.jpg)
@interface MyViewController : UIViewController<UITableViewDataSource> !@property (strong, nonatomic) UITableView *tableView; !@end
- (void)viewDidLoad { [super viewDidLoad]; self.tableView = [[UITableView alloc] init]; self.tableView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); self.tableView.dataSource = self; [self.view addSubview:self.tableView]; }
UITableView в контроллере
![Page 26: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/26.jpg)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 3; } !- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *text = [NSString stringWithFormat:@"Строка %d", indexPath.row]; UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; cell.textLabel.text = text; return cell; }
Настраиваем какие строки показывать
![Page 27: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/27.jpg)
![Page 28: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/28.jpg)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *text = [NSString stringWithFormat:@"Строка %d", indexPath.row]; UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; if (indexPath.row == 0) { cell.textLabel.textColor = [UIColor redColor]; } else if (indexPath.row == 1) { cell.textLabel.textColor = [UIColor blueColor]; } else if (indexPath.row == 2) { cell.textLabel.textColor = [UIColor brownColor]; } cell.textLabel.font = [UIFont boldSystemFontOfSize:23]; cell.textLabel.text = text; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; }
Настройка ячеек
![Page 29: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/29.jpg)
![Page 30: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/30.jpg)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1000; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.font = [UIFont fontWithName:@"Baskerville" size:20]; } NSString *text = [NSString stringWithFormat:@"Строка %d", indexPath.row]; cell.textLabel.text = text; return cell; }
Если много ячеек — надо их переиспользовать
![Page 31: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/31.jpg)
![Page 32: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/32.jpg)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { BOOL dark = (indexPath.row % 2) == 0; NSString *identifier = dark ? @"cell_dark" : @"cell_light"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; if (dark) { cell.backgroundColor = [UIColor grayColor]; cell.textLabel.textColor = [UIColor whiteColor]; } else { cell.backgroundColor = [UIColor whiteColor]; cell.textLabel.textColor = [UIColor blackColor]; } } NSString *text = [NSString stringWithFormat:@"Строка %d", indexPath.row]; cell.textLabel.text = text; return cell; }
Если несколько типов ячеек - разные identifier
![Page 33: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/33.jpg)
![Page 34: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/34.jpg)
Разные типы ячеек
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; } NSString *text = [NSString stringWithFormat:@"Строка %d", indexPath.row]; NSString *detailText = [NSString stringWithFormat:@"Текст %d", indexPath.row]; cell.textLabel.text = text; cell.detailTextLabel.text = detailText; return cell; }
![Page 35: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/35.jpg)
![Page 36: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/36.jpg)
Как реагировать на нажатие
@interface MyViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> !@property (strong, nonatomic) UITableView *tableView; !@end
- (void)viewDidLoad { [super viewDidLoad]; self.tableView = [[UITableView alloc] init]; self.tableView.frame = self.view.bounds; self.tableView.dataSource = self; self.tableView.delegate = self; [self.view addSubview:self.tableView]; }
![Page 37: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/37.jpg)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"выбрана строка %d", indexPath.row); }
![Page 38: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/38.jpg)
![Page 39: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/39.jpg)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SecondViewController *s = [[SecondViewController alloc] init]; [self.navigationController pushViewController:s animated:YES]; }
![Page 40: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/40.jpg)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ShopViewController *svc = [[ShopViewController alloc] init]; Shop *shop = self.shops[indexPath.row]; svc.shop = shop; [self.navigationController pushViewController:svc animated:YES]; }
![Page 41: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/41.jpg)
UITableViewController
![Page 42: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/42.jpg)
@interface MyViewController : UITableViewController !@end
@implementation MyViewController !- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1000; } !- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... } !- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... } !@end
![Page 43: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/43.jpg)
UIScrollView
![Page 44: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/44.jpg)
- (void)viewDidLoad { [super viewDidLoad]; UIView *v1 = [[UIView alloc] init]; v1.frame = CGRectMake(20, 80, 280, 800); v1.backgroundColor = [UIColor redColor]; [self.view addSubview:v1]; }
Если интерфейс не помещается по высоте
![Page 45: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/45.jpg)
![Page 46: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/46.jpg)
- (void)viewDidLoad { [super viewDidLoad]; UIView *v1 = [[UIView alloc] init]; v1.frame = CGRectMake(20, 80, 280, 800); v1.backgroundColor = [UIColor redColor]; UIScrollView *scrollView = [[UIScrollView alloc] init]; scrollView.frame = self.view.bounds; scrollView.contentSize = CGSizeMake(320, 1000); [scrollView addSubview:v1]; [self.view addSubview:scrollView]; }
Создаем UIScrollView
![Page 47: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/47.jpg)
![Page 48: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/48.jpg)
Если внутри UINavigationController
![Page 49: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/49.jpg)
UIWebView
![Page 50: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/50.jpg)
- (void)viewDidLoad { [super viewDidLoad]; UIWebView *webView = [[UIWebView alloc] init]; webView.frame = self.view.bounds; [self.view addSubview:webView]; NSURL *url = [NSURL URLWithString:@"http://yandex.ru"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [webView loadRequest:request]; }
Открываем внешний сайт
![Page 51: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/51.jpg)
![Page 52: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/52.jpg)
- (void)viewDidLoad { [super viewDidLoad]; UIWebView *webView = [[UIWebView alloc] init]; webView.frame = self.view.bounds; [self.view addSubview:webView]; NSString *html = @"<p>Привет, мир!</p><p><a href=\"http://yandex.ru\">Яндекс</a></p>"; [webView loadHTMLString:html baseURL:nil]; }
Открываем произвольный html
![Page 53: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/53.jpg)
![Page 54: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/54.jpg)
MKMapView
![Page 55: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/55.jpg)
#import "MyViewController.h" #import <MapKit/MapKit.h> !@implementation MyViewController !- (void)viewDidLoad { [super viewDidLoad]; MKMapView *mapView = [[MKMapView alloc] init]; mapView.frame = self.view.bounds; [self.view addSubview:mapView]; } !!@end
Добавляем карту
![Page 56: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/56.jpg)
![Page 57: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/57.jpg)
- (void)viewDidLoad { [super viewDidLoad]; MKMapView *mapView = [[MKMapView alloc] init]; mapView.frame = self.view.bounds; CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(55.7720304, 37.5744999); MKCoordinateSpan span = MKCoordinateSpanMake(0.001, 0.001); MKCoordinateRegion region = MKCoordinateRegionMake(coord, span); [mapView setRegion:region]; [self.view addSubview:mapView]; }
Ставим координату и масштаб
![Page 58: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/58.jpg)
![Page 59: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/59.jpg)
Добавляем класс магазина, !чтобы отобразить его на карте
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> !@interface Shop : NSObject<MKAnnotation> !@property (nonatomic) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *subtitle; !@end
![Page 60: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/60.jpg)
- (void)viewDidLoad { [super viewDidLoad]; MKMapView *mapView = [[MKMapView alloc] init]; mapView.frame = self.view.bounds; CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(55.7720304, 37.5744999); MKCoordinateSpan span = MKCoordinateSpanMake(0.001, 0.001); MKCoordinateRegion region = MKCoordinateRegionMake(coord, span); [mapView setRegion:region]; Shop *s = [[Shop alloc] init]; s.title = @"Магазин"; s.subtitle = @"Описание"; s.coordinate = CLLocationCoordinate2DMake(55.7720304, 37.5744999); [mapView addAnnotation:s]; [self.view addSubview:mapView]; }
Показываем булавку
![Page 61: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/61.jpg)
![Page 62: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/62.jpg)
![Page 63: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/63.jpg)
![Page 64: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/64.jpg)
Демонстрация
![Page 65: Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views](https://reader031.fdocuments.net/reader031/viewer/2022013102/554f59dcb4c905c8088b459a/html5/thumbnails/65.jpg)
Домашнее задание
• реализовать контроллер с таблицей • если есть экраны с прокруткой, картой, или webView - реализовать их