Вандад Нахавандипур - iOS. Приемы программирования
- Название:iOS. Приемы программирования
- Автор:
- Жанр:
- Издательство:Питер
- Год:2014
- Город:Санкт-Петербург
- ISBN:978-5-496-01016-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Вандад Нахавандипур - iOS. Приемы программирования краткое содержание
Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.
Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.
iOS. Приемы программирования - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Итак, предположим, что у нас есть два контроллера видов. Классы этих контроллеров называются FirstViewController и SecondViewController:
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
FirstViewController *firstViewController = [[FirstViewController alloc]
initWithNibName: nil
bundle: NULL];
SecondViewController *secondViewController = [[SecondViewController alloc]
initWithNibName: nil
bundle: NULL];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:@[firstViewController,
secondViewController
]];
self.window.rootViewController = tabBarController;
return YES;
}
Когда панель вкладок отобразится на экране, ее элементы будут расположены именно так, как показано на рис. 1.38. Имя каждого из этих элементов основывается на названии того контроллера вида, который соответствует конкретному элементу. Определим заголовки для обоих контроллеров наших видов.
Когда загружается панель вкладок, вместе с ней загружается контроллер вида первого входящего в нее элемента. Все остальные контроллеры видов инициализируются, но их виды не загружаются. Это означает, что любой код, который вы напишете во viewDidLoad второго контроллера вида, не выполнится до тех пор, пока пользователь не нажмет второй элемент этой панели в первый раз. Поэтому если вы присвоите заголовок панели контроллеру второго вида в его viewDidLoad и запустите приложение, то обнаружите, что заголовок панели вкладок по-прежнему пуст.
Первый контроллер вида мы назовем First:
#import «FirstViewController.h»
@implementation FirstViewController
— (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName: nibNameOrNil
bundle: nibBundleOrNil];
if (self!= nil) {
self.title = @"First";
}
return self;
}
— (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
А второй контроллер вида будет называться Second:
#import «SecondViewController.h»
@implementation SecondViewController
— (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName: nibNameOrNil
bundle: nibBundleOrNil];
if (self!= nil) {
self.title = @"Second";
}
return self;
}
— (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
Теперь запустим приложение и посмотрим, что получилось (рис. 1.42).

Рис. 1.42.Очень простая панель вкладок, на которой находятся два контроллера вида
Как видите, у контроллеров видов нет навигационной панели. Что делать? Все просто. Как вы помните, UINavigationController — это подкласс UIViewController. Итак, мы можем добавлять экземпляры навигационных контроллеров на панель вкладок, а внутрь каждого навигационного контроллера загрузить контроллер вида. Чего же мы ждем?
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// Точка переопределения для специальной настройки,
// выполняемой после запуска приложения.
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
FirstViewController *firstViewController = [[FirstViewController alloc]
initWithNibName: nil
bundle: NULL];
UINavigationController *firstNavigationController =
[[UINavigationController alloc]
initWithRootViewController: firstViewController];
SecondViewController *secondViewController = [[SecondViewController alloc]
initWithNibName: nil
bundle: NULL];
UINavigationController *secondNavigationController =
[[UINavigationController alloc]
initWithRootViewController: secondViewController];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:
@[firstNavigationController, secondNavigationController]];
self.window.rootViewController = tabBarController;
return YES;
}
Что получается? Именно то, что мы хотели (рис. 1.43).

Рис. 1.43.Панель вкладок, на которой контроллеры видов находятся внутри навигационных контроллеров
Как было показано на рис. 1.38, каждый элемент панели вкладок может содержать текст или изображение. Мы узнали, что, пользуясь свойством title контроллера вида, можно задавать такой текст. А что насчет изображения? Оказывается, у каждого контроллера вида есть и свойство tabItem. Это свойство соответствует той вкладке, которая находится в актуальном контроллере вида. Вы можете пользоваться этим свойством, чтобы задавать изображение для вкладки. Изображение для вкладки задается через ее свойство image. Я уже сделал два изображения — прямоугольник и кружок, а теперь выведу их как изображения для вкладок, соответствующих каждому из моих контроллеров видов. Вот код для первого контроллера вида:
— (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName: nibNameOrNil
bundle: nibBundleOrNil];
if (self!= nil) {
self.title = @"First";
self.tabBarItem.image = [UIImage imageNamed:@"FirstTab"];
}
return self;
}
— (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
А вот код для второго контроллера:
— (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName: nibNameOrNil
bundle: nibBundleOrNil];
if (self!= nil) {
self.title = @"Second";
self.tabBarItem.image = [UIImage imageNamed:@"SecondTab"];
}
return self;
}
— (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
Запустив приложение в эмуляторе, увидим такую картинку, как на рис. 1.44.

Рис. 1.44.Элементы панели вкладок с изображениями
1.17. Отображение статического текста с помощью UILabel
Постановка задачи
Необходимо отображать для пользователя текст. Кроме того, вы хотели бы управлять шрифтом и цветом этого текста.
Статическим называется такой текст, который пользователь не может напрямую изменять во время исполнения.
Решение
Используйте класс UILabel.
Обсуждение
Подписи (Labels) встречаются в iOS повсюду. Они используются практически в любых приложениях, за исключением игр, для отображения содержимого которых обычно применяется OpenGL ES, а не основные фреймворки отрисовки, входящие в состав iOS. На рис. 1.45 показаны несколько подписей, имеющихся в приложении Settings (Настройки) для iPhone.

Рис. 1.45.Подписи в качестве названий настроек
Читать дальшеИнтервал:
Закладка: