SlideShare a Scribd company logo
СложныеViews
Разработка приложений для iOS
Лекция 5
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
С помощью какого контроллера	

осуществляется навигация?
С помощью какого контроллера	

осуществляется навигация?
UINavigationController
Как показать контроллер, чтобы он
выехал снизу вверх?
Как показать контроллер, чтобы он
выехал снизу вверх?
[self presentViewController:vc	

animated:YES	

completion:nil];
Как добавить кнопку 	

в navigation bar справа?
Как добавить кнопку 	

в navigation bar справа?
self.navigationItem.rightBarButtonItem = …
Как задается картинка
контроллера в
таббаре?
Как задается картинка
контроллера в
таббаре?
self.tabBarItem.image = …
СложныеViews
UITableView
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
@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 в контроллере
- (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;
}
Настраиваем какие строки показывать
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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;
}
Настройка ячеек
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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;
}
Если много ячеек — надо их переиспользовать
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Разные типы ячеек
- (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;
}
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Как реагировать на нажатие
@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];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"выбрана строка %d", indexPath.row);
}
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondViewController *s = [[SecondViewController alloc] init];
[self.navigationController pushViewController:s animated:YES];
}
- (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];
}
UITableViewController
@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
UIScrollView
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *v1 = [[UIView alloc] init];
v1.frame = CGRectMake(20, 80, 280, 800);
v1.backgroundColor = [UIColor redColor];
[self.view addSubview:v1];
}
Если интерфейс не помещается по высоте
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Если внутри UINavigationController
UIWebView
- (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];
}
Открываем внешний сайт
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
MKMapView
#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
Добавляем карту
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
- (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];
}
Ставим координату и масштаб
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Добавляем класс магазина, !
чтобы отобразить его на карте
#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
- (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];
}
Показываем булавку
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Демонстрация
Домашнее задание
• реализовать контроллер с таблицей	

• если есть экраны с прокруткой, картой,
или webView - реализовать их
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34

More Related Content

PDF
iOS-05_1-UIKit
PDF
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
PDF
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
PDF
Rambler.iOS #7: Построение сложного табличного интерфейса
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PDF
Эффективность на рубеже UITableView — Александр Зимин
PDF
UICollectionView — Александр Зимин
PDF
Денис Чистяков: DOM, jQuery и все, все, все
iOS-05_1-UIKit
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
Rambler.iOS #7: Построение сложного табличного интерфейса
Фундаментальные основы разработки под iOS. Павел Тайкало
Эффективность на рубеже UITableView — Александр Зимин
UICollectionView — Александр Зимин
Денис Чистяков: DOM, jQuery и все, все, все

What's hot (20)

PDF
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
PDF
Frontend весна 2014 лекция 1
KEY
Squeek School #7
PDF
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
PDF
Максим Хромцов "Yandex MapKit для Android OS в примерах"
PDF
Использование API Яндекс.Карт
PDF
Александр Тармолов "API Яндекс.Карт"
PPTX
Render API.
PDF
Making Scalable JavaScript Application
PPT
Drupal 7 deploy database updates
PDF
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
PDF
Алексей Бережной — «jQuery»
PDF
Роман Ермолов - Отладка приложений под iOS
PPTX
Yii 2. Что нового?
PDF
YiiConf 2012 - Alexander Makarov - Yii2, что нового
PPT
Yandex Map Kit для Android OS - Максим Хромцов
PDF
Entity. Anton Shubkin and Yaroslav Ponomarev
PPTX
Сущности в Drupal 7
PDF
Внутреннее устройство и оптимизация бандла webpack
PPTX
Максим Щепелин. "Unittesting. Как?"
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Frontend весна 2014 лекция 1
Squeek School #7
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Использование API Яндекс.Карт
Александр Тармолов "API Яндекс.Карт"
Render API.
Making Scalable JavaScript Application
Drupal 7 deploy database updates
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
Алексей Бережной — «jQuery»
Роман Ермолов - Отладка приложений под iOS
Yii 2. Что нового?
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Yandex Map Kit для Android OS - Максим Хромцов
Entity. Anton Shubkin and Yaroslav Ponomarev
Сущности в Drupal 7
Внутреннее устройство и оптимизация бандла webpack
Максим Щепелин. "Unittesting. Как?"
Ad

Viewers also liked (9)

PDF
Введение в разработку для iOS
PDF
20 Facts about Swift programming language
PDF
Swift Programming Language
PDF
Преимущества и недостатки языка Swift
PDF
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
PDF
Introduction to Swift programming language.
PDF
A swift introduction to Swift
PDF
Swift Introduction
PDF
Swift Programming Language
Введение в разработку для iOS
20 Facts about Swift programming language
Swift Programming Language
Преимущества и недостатки языка Swift
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Introduction to Swift programming language.
A swift introduction to Swift
Swift Introduction
Swift Programming Language
Ad

Similar to Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views (15)

PDF
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
PDF
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
PDF
Aggregation vs Inheritance
PDF
iOS-05_2-UIKit
PDF
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
PDF
Squeek school 4
PDF
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
PDF
#MBLTdev: Опыт использования MVVM в реальных проектах
PDF
iOS 7. Новые концепции и новые средства
PDF
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
KEY
занятие 2
PDF
Fun with core graphics
KEY
Дмитрий Захаров «Компоновка элементов пользовательского интерфейса»
PPT
Володимир Семенякін “Demiurg. Приручення заліза”
PDF
Squeek School #5
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Aggregation vs Inheritance
iOS-05_2-UIKit
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Squeek school 4
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
#MBLTdev: Опыт использования MVVM в реальных проектах
iOS 7. Новые концепции и новые средства
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
занятие 2
Fun with core graphics
Дмитрий Захаров «Компоновка элементов пользовательского интерфейса»
Володимир Семенякін “Demiurg. Приручення заліза”
Squeek School #5

More from Глеб Тарасов (20)

PDF
Gleb Tarasov. Portfolio
PDF
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
PDF
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
PDF
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
PDF
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
PDF
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
PDF
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PDF
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
PPT
Презентация проекта Ulect
PDF
Презентация для Foundation Institute
PDF
Делаем жизнь лучше с CocoaPods
PDF
msumobi2. Лекция 2
PDF
msumobi2. Лекция 1
PDF
Школа-студия разработки для iOS. Лекция 4. Работа с данными
PDF
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
PDF
ShareKit. Evernote Dev Meetup
PDF
Глеб Тарасов. Портфолио
PDF
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Gleb Tarasov. Portfolio
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Презентация проекта Ulect
Презентация для Foundation Institute
Делаем жизнь лучше с CocoaPods
msumobi2. Лекция 2
msumobi2. Лекция 1
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
ShareKit. Evernote Dev Meetup
Глеб Тарасов. Портфолио
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты

Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views

  • 1. СложныеViews Разработка приложений для iOS Лекция 5 Глеб Тарасов gleb34@gmail.com
  • 3. С помощью какого контроллера осуществляется навигация?
  • 4. С помощью какого контроллера осуществляется навигация? UINavigationController
  • 5. Как показать контроллер, чтобы он выехал снизу вверх?
  • 6. Как показать контроллер, чтобы он выехал снизу вверх? [self presentViewController:vc animated:YES completion:nil];
  • 7. Как добавить кнопку в navigation bar справа?
  • 8. Как добавить кнопку в navigation bar справа? self.navigationItem.rightBarButtonItem = …
  • 10. Как задается картинка контроллера в таббаре? self.tabBarItem.image = …
  • 25. @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 в контроллере
  • 26. - (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; } Настраиваем какие строки показывать
  • 28. - (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; } Настройка ячеек
  • 30. - (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; } Если много ячеек — надо их переиспользовать
  • 32. - (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
  • 34. Разные типы ячеек - (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; }
  • 36. Как реагировать на нажатие @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]; }
  • 37. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"выбрана строка %d", indexPath.row); }
  • 39. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SecondViewController *s = [[SecondViewController alloc] init]; [self.navigationController pushViewController:s animated:YES]; }
  • 40. - (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]; }
  • 42. @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
  • 44. - (void)viewDidLoad { [super viewDidLoad]; UIView *v1 = [[UIView alloc] init]; v1.frame = CGRectMake(20, 80, 280, 800); v1.backgroundColor = [UIColor redColor]; [self.view addSubview:v1]; } Если интерфейс не помещается по высоте
  • 46. - (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
  • 50. - (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]; } Открываем внешний сайт
  • 52. - (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
  • 55. #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 Добавляем карту
  • 57. - (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]; } Ставим координату и масштаб
  • 59. Добавляем класс магазина, ! чтобы отобразить его на карте #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
  • 60. - (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]; } Показываем булавку
  • 65. Домашнее задание • реализовать контроллер с таблицей • если есть экраны с прокруткой, картой, или webView - реализовать их