iOS. Приемы программирования - стр. 52
>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. Подписи в качестве названий настроек
Как видите, подписи содержат текстовые названия разделов приложения Settings (Настройки), в частности iCloud, Twitter, FaceTime, Safari и т. д.
Чтобы создать подпись, необходимо инстанцировать объект типа UILabel. Установка или получение текста для подписи осуществляется с помощью свойства text. Итак, определим подпись в файле реализации контроллера нашего вида:
>#import "ViewController.h"
>@interface ViewController ()
>@property (nonatomic, strong) UILabel *myLabel;
>@end
>@implementation ViewController
>…
А теперь в viewDidLoad инстанцируем подпись и сообщаем среде времени исполнения, где следует разместить подпись (эта информация указывается в свойстве frame) и в какой вид она должна быть добавлена. В данном случае подпись окажется в виде контроллера нашего вида:
>– (void)viewDidLoad{
>[super viewDidLoad];
>CGRect labelFrame = CGRectMake(0.0f,
>0.0f,
>100.0f,
>23.0f);
>self.myLabel = [[UILabel alloc] initWithFrame: labelFrame];
>self.myLabel.text = @"iOS 7 Programming Cookbook";
>self.myLabel.font = [UIFont boldSystemFontOfSize:14.0f];
>self.myLabel.center = self.view.center;
>[self.view addSubview: self.myLabel];
>}
Теперь запустим приложение и посмотрим, что происходит (рис. 1.46).
Рис. 1.46. Слишком длинная подпись, которая не умещается на экране
Как видите, текст (содержимое) подписи обрезается, а за ним идут точки, поскольку ширины поля для подписи недостаточно для того, чтобы уместился весь текст. Для решения этой проблемы можно было бы увеличить ширину, но что делать с высотой? А что, если мы хотим, чтобы текст переходил на следующую строку. Хорошо, увеличим высоту с 23.0f до 50.0f:
>CGRect labelFrame = CGRectMake(0.0f,
>0.0f,
>100.0f,
>50.0f);
Если сейчас запустить приложение, получится тот же самый результат, что и на рис. 1.46. Вы могли бы спросить: «Я увеличил высоту, так почему же текст не переходит на следующую строку»? Оказывается, у класса UILabel есть свойство numberOfLines, в котором нужно указать, на сколько строк должен разбиваться текст подписи, если в ширину для нее будет недостаточно места. Если задать здесь значение 3, то вы сообщите программе, что текст подписи должен занимать не более трех строк, если этот текст не умещается в одной строке: