SlideShare a Scribd company logo
1 of 66
Download to read offline
Сложные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
@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;
}
Настраиваем какие строки показывать
- (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;
}
Настройка ячеек
- (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;
}
Если много ячеек — надо их переиспользовать
- (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
Разные типы ячеек
- (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;
}
Как реагировать на нажатие
@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);
}
- (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];
}
Если интерфейс не помещается по высоте
- (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
Если внутри 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];
}
Открываем внешний сайт
- (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
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
Добавляем карту
- (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];
}
Ставим координату и масштаб
Добавляем класс магазина, !
чтобы отобразить его на карте
#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];
}
Показываем булавку
Демонстрация
Домашнее задание
• реализовать контроллер с таблицей	

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

gleb34@gmail.com	

twitter.com/pilot34

More Related Content

What's hot

"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Yandex
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Yandex
 
Использование API Яндекс.Карт
Использование API Яндекс.КартИспользование API Яндекс.Карт
Использование API Яндекс.КартFDConf
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updatesAnton Ivanov
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...it-people
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Yandex
 
Роман Ермолов - Отладка приложений под iOS
Роман Ермолов - Отладка приложений под iOSРоман Ермолов - Отладка приложений под iOS
Роман Ермолов - Отладка приложений под iOSAlexander Zimin
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
Yandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовYandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовMeetup.by
 
Entity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav PonomarevEntity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav PonomarevADCI Solutions
 
Сущности в Drupal 7
Сущности в Drupal 7Сущности в Drupal 7
Сущности в Drupal 7Itech4Web
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 

What's hot (20)

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

Viewers also liked

Введение в разработку для iOS
Введение в разработку для iOSВведение в разработку для iOS
Введение в разработку для iOSMichael Dudarev
 
20 Facts about Swift programming language
20 Facts about Swift programming language20 Facts about Swift programming language
20 Facts about Swift programming languageRohit Tirkey
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming LanguageAnıl Sözeri
 
Преимущества и недостатки языка Swift
Преимущества и недостатки языка SwiftПреимущества и недостатки языка Swift
Преимущества и недостатки языка SwiftAndrey Volobuev
 
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming LanguageSwift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming LanguageHossam Ghareeb
 
Introduction to Swift programming language.
Introduction to Swift programming language.Introduction to Swift programming language.
Introduction to Swift programming language.Icalia Labs
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to SwiftGiordano Scalzo
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming LanguageGiuseppe Arici
 

Viewers also liked (9)

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

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

iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектахe-Legion
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersГлеб Тарасов
 
Байки из склепа. Реальный опыт разработок для iOS и Android
Байки из склепа. Реальный опыт разработок для iOS и AndroidБайки из склепа. Реальный опыт разработок для iOS и Android
Байки из склепа. Реальный опыт разработок для iOS и AndroidHeads&Hands
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphicsSoftTechnics
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsГлеб Тарасов
 
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...HappyDev
 
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»Mail.ru Group
 
занятие 2
занятие 2занятие 2
занятие 2ajantis
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюГлеб Тарасов
 
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)Ontico
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadГлеб Тарасов
 
Архитектура минимальных Ui компонент
Архитектура минимальных Ui компонентАрхитектура минимальных Ui компонент
Архитектура минимальных Ui компонентLerika
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)65apps
 

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

iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
Байки из склепа. Реальный опыт разработок для iOS и Android
Байки из склепа. Реальный опыт разработок для iOS и AndroidБайки из склепа. Реальный опыт разработок для iOS и Android
Байки из склепа. Реальный опыт разработок для iOS и Android
 
Foxdevs
FoxdevsFoxdevs
Foxdevs
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
 
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
 
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
 
занятие 2
занятие 2занятие 2
занятие 2
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
 
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
 
Архитектура минимальных Ui компонент
Архитектура минимальных Ui компонентАрхитектура минимальных Ui компонент
Архитектура минимальных Ui компонент
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)
 

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

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Глеб Тарасов
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect Глеб Тарасов
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation InstituteГлеб Тарасов
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsГлеб Тарасов
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаГлеб Тарасов
 
Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы.
Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы.Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы.
Курсы по мобильной разработке. 3 лекция. Сложные интерфейсы.Глеб Тарасов
 

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

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

Интуит. Разработка приложений для 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 = …
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 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; } Настраиваем какие строки показывать
  • 27.
  • 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; } Настройка ячеек
  • 29.
  • 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; } Если много ячеек — надо их переиспользовать
  • 31.
  • 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
  • 33.
  • 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; }
  • 35.
  • 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); }
  • 38.
  • 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]; } Если интерфейс не помещается по высоте
  • 45.
  • 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
  • 47.
  • 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]; } Открываем внешний сайт
  • 51.
  • 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
  • 53.
  • 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 Добавляем карту
  • 56.
  • 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]; } Ставим координату и масштаб
  • 58.
  • 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]; } Показываем булавку
  • 61.
  • 62.
  • 63.
  • 65. Домашнее задание • реализовать контроллер с таблицей • если есть экраны с прокруткой, картой, или webView - реализовать их