Решив попытаться программировать для iOS я пересмотрел кучу ресурсов в поисках документации, описаний, уроков, но чаще всего попадались либо уроки на тему «Создание первого приложения Hello World», либо какие-то узкоспециализорованные статьи для решения конкретных задач. Поэтому начав кое как разбираться в этой системе я решил написать статью для новичков о создании чуть более сложного, чем Hello world приложения. Это приложение состоит из двух видовых панелей и одного Toolbar с кнопкой, по нажатии которой эти самые панели будут меняться местами. Для создания использован Xcode 4.1
Итак начнем с начала. Xcode предоставляет несколько шаблонов для создания приложений, но мы не будем искать легких путей и создадим приложение с наиболее скудным шаблоном, чтобы в последствии самостоятельно собрать в кучу все детали.
Зайдем в меню File -> New -> New project и выберем проект типа Window based application
![Image Hosted by ImageShack.us](https://habr.com/images/px.gif#%3D%22http%3A%2F%2Fimg148.imageshack.us%2Fimg148%2F3149%2Fscreenshot20110806at110.png%22)
Дадим нашем проекту имя на ваше усмотрение, выберем в качестве устройства iPhone и сбросим все галочки, если они там были установлены.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/b2b/504/e74/b2b504e74af55fc1058bc0e2e6fd411f.png)
В итоге получаем во такую примерно картину
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/b67/0c0/580/b670c0580f22deeee4b8020a732e2d31.png)
Теперь нам необходимо добавить к нашему проекту еще 3 класса — это будут два вида, которые мы будем менять и класс контроллера, которому будет принадлежать Toolbar, он и будет менять виды. Для этого мы нажимаем правой кнокой в окошке Project Navigator (это слева, где выведен список файлов нашего проекта), в открывшемся меню выбираем New file, открывается, уже знакомое окно создания файла и на этот раз мы выбираем UIView Controller Subclass.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/9db/bb1/305/9dbbb1305667011eedf89145618d0966.png)
Нажимаем «Next», убираем все галочки для того чтобы автоматически не создавались xib файлы, их мы позже добавим в проект самостоятельно.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/853/07e/534/85307e5343dd3fa58661a9150107f58b.png)
Выбираем имя, я назвал его controllerView
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/349/fef/b9f/349fefb9f0663be2fb182ba304d2cd9b.png)
Аналогично создаем еще два класса firstView и secondView. В итоге мы должны добавить 3 пары файлов с расширениями .h и .m. Теперь добавим два xib файла, в которых, как раз, и будет содержаться внешний вид тех двух видов, которые мы будем менять местами. Для этого снова нажимаем правой кнопкой в окошке Project Navigator, в открывшемся меню выбираем New file и создаем файл типа View.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/d43/700/e07/d43700e07c41ad4e5df4d977b26e7038.png)
Выбираем в качестве устройства iPhone и называем их firstView и secondView.
Теперь, когда все необходимые файлы созданы, начнем их собирать воедино, чтобы получить работающее приложение.
Для начала изменим файлы myViewAppAppDelegate.h и myViewAppAppDelegate.m в которых мы добавим в основное окно экземпляр нашего контроллера controllerView, для этого добавим класс controllerView в файл myViewAppAppDelegate.h, создадим экземпляр класса и добавим его в основное вид, уже в файле myViewAppAppDelegate.m.
Файл myViewAppAppDelegate.h
Файл myViewAppAppDelegate.m
Также подготовим файл controllerView.h, опишем там все необходимые нам классы и методы, чтобы в последствии связать их с нашими объектами.
Файл controllerView.h
Теперь в файл с основным окном MainWindow.xib необходимо добавить сам объект контроллера и связать его с нашим классом. Для этого открываем файл MainWindow.xib, в библиотеке (справа внизу) выбираем элемент View Controller
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/96b/a84/b2c/96ba84b2c091ce37582e35e3200eefa0.png)
и перетаскиваем его поверх основного вида
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/2be/f26/b57/2bef26b57c73d994350add37ab7a06f2.png)
После этого в колонке пиктограмм слева должна добавиться новая пиктограмма, соответствующая нашему контроллеру. Нам необходимо связать наш контроллер с нашим классом controllerView, для этого выделяем объект контроллера и в окне Identity Inspector (правое верхнее окно, см. предыдущий рисунок) из списка классов выбирает controllerView. Для проверки наведем курсор на пиктограмму нашего контроллера в колонке пиктограмм и там должна появиться подпись Controller View.
Теперь берем объект View в библиотеке и перетаскиваем его на наш контроллер.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/583/48f/3d5/58348f3d55b8bb9215a2b5fa06e2d767.png)
И устанавливаем Toolbar, для этого в библиотеке берем объект Toolbar в библиотеке и устанавливаем его в верхней части нашего объекта View. Дважды нажав на кнопку, меняем ее название на «Смена видов».
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/849/3a8/3cb/8493a83cba425542576ab33e9000a2f1.png)
Свяжем объект кнопки с, объявленным нами методом, для этого выделите кнопку, зажмите control и, нажав левую кнопку мыши, перетащите линию на пиктограмму Files's owner и выберите из открывшегося списка метод changeView. Затем выберем иконку My View App App Delegate, зажмем control и левуй кнопку мыши и перетащим линию на иконку Controller View и выберем из открывшегося списка controllerView. Основная часть урока уже позади, теперь еще немного кода, пару связей и все готово.
Изменим файл controllerView.m, добавим туда код метода для смены видов
Файл controllerView.m
Теперь осталось довести до ума наши файлы видов. Выберите файл firstView.xib и добавьте туда место для нашего Toolbar, чтобы он его не перекрывал. Для этого выделите основной вид и окне Simulated Metrics напротив Top Bar выберите Navigation Bar.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/ade/4fd/4e9/ade4fd4e9474a7e177a83ca088c043b5.png)
Затем сделаем этот вид экземпляром класса firstView, для этого, как мы уже делали в основном окне, в окошке Identity Inspector из списка классов выбирает firstView.
![Image Hosted by ImageShack.us](https://habrastorage.org/r/w1560/getpro/habr/post_images/2d1/06e/691/2d106e6919e28689af500bba5a7d7985.png)
И последний штрих. Выбираем иконку File's Owner зажимаем control и левую кнопку мыши и перетаскиваем линию на наш вид, в открывшемся меню выберем View. Далее повторяем эту же процедуру для файла secondView.xib, только его привязываем к классу secondview. Также вносим изменения во внешний вид нашего первого и второго видов, чтоб мы могли отличать их, когда они будут меняться, добавляем какие-нибудь кнопочки или картинки.
На этом все, проект можно запускать и если вы все сделали правильно, то у вас будет приложение с одной действующей кнопкой, которая меняет местами два view.
Идею урока подсмотрел в книге «Beginning iPhone 4 Development Exploring the iOS SDK» David Mark, Jeff LaMarche, Jack Nutting, но реализация и описание мое.
Итак начнем с начала. Xcode предоставляет несколько шаблонов для создания приложений, но мы не будем искать легких путей и создадим приложение с наиболее скудным шаблоном, чтобы в последствии самостоятельно собрать в кучу все детали.
Зайдем в меню File -> New -> New project и выберем проект типа Window based application
![Image Hosted by ImageShack.us](https://habr.com/images/px.gif#%3D%22http%3A%2F%2Fimg148.imageshack.us%2Fimg148%2F3149%2Fscreenshot20110806at110.png%22)
Дадим нашем проекту имя на ваше усмотрение, выберем в качестве устройства iPhone и сбросим все галочки, если они там были установлены.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/b2b/504/e74/b2b504e74af55fc1058bc0e2e6fd411f.png)
В итоге получаем во такую примерно картину
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/b67/0c0/580/b670c0580f22deeee4b8020a732e2d31.png)
Теперь нам необходимо добавить к нашему проекту еще 3 класса — это будут два вида, которые мы будем менять и класс контроллера, которому будет принадлежать Toolbar, он и будет менять виды. Для этого мы нажимаем правой кнокой в окошке Project Navigator (это слева, где выведен список файлов нашего проекта), в открывшемся меню выбираем New file, открывается, уже знакомое окно создания файла и на этот раз мы выбираем UIView Controller Subclass.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/9db/bb1/305/9dbbb1305667011eedf89145618d0966.png)
Нажимаем «Next», убираем все галочки для того чтобы автоматически не создавались xib файлы, их мы позже добавим в проект самостоятельно.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/853/07e/534/85307e5343dd3fa58661a9150107f58b.png)
Выбираем имя, я назвал его controllerView
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/349/fef/b9f/349fefb9f0663be2fb182ba304d2cd9b.png)
Аналогично создаем еще два класса firstView и secondView. В итоге мы должны добавить 3 пары файлов с расширениями .h и .m. Теперь добавим два xib файла, в которых, как раз, и будет содержаться внешний вид тех двух видов, которые мы будем менять местами. Для этого снова нажимаем правой кнопкой в окошке Project Navigator, в открывшемся меню выбираем New file и создаем файл типа View.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/d43/700/e07/d43700e07c41ad4e5df4d977b26e7038.png)
Выбираем в качестве устройства iPhone и называем их firstView и secondView.
Теперь, когда все необходимые файлы созданы, начнем их собирать воедино, чтобы получить работающее приложение.
Для начала изменим файлы myViewAppAppDelegate.h и myViewAppAppDelegate.m в которых мы добавим в основное окно экземпляр нашего контроллера controllerView, для этого добавим класс controllerView в файл myViewAppAppDelegate.h, создадим экземпляр класса и добавим его в основное вид, уже в файле myViewAppAppDelegate.m.
Файл myViewAppAppDelegate.h
#import <UIKit/UIKit.h>
@class controllerView; //добавляем класс контроллера
@interface myViewAppAppDelegate : NSObject <UIApplicationDelegate>{
UIWindow *window;
controllerView *ControllerView; //объявляем экзепляр класса
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet controllerView *ControllerView;
@end
Файл myViewAppAppDelegate.m
#import "myViewAppAppDelegate.h"
#import "controllerView.h"
@implementation myViewAppAppDelegate
@synthesize window = _window;
@synthesize ControllerView;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window addSubview:ControllerView.view]; //добавляем контроллер в основное окно
[self.window makeKeyAndVisible];
return YES;
}
//Здесь находятся все функции созданные в этом файле автоматически, их мы не меняли
- (void)dealloc
{
[ControllerView release]; //уничтожаем указатель
[_window release];
[super dealloc];
}
@end
Также подготовим файл controllerView.h, опишем там все необходимые нам классы и методы, чтобы в последствии связать их с нашими объектами.
Файл controllerView.h
#import <UIKit/UIKit.h>
@class firstView; //класс первого вида
@class secondView; //класс второго вида
@interface controllerView : UIViewController {
firstView *FirstView;
secondView *SecondView;
}
@property (retain, nonatomic) firstView *FirstView;
@property (retain, nonatomic) secondView *SecondView;
- (IBAction)changeView:(id)sender; //метод для смены видов
@end
Теперь в файл с основным окном MainWindow.xib необходимо добавить сам объект контроллера и связать его с нашим классом. Для этого открываем файл MainWindow.xib, в библиотеке (справа внизу) выбираем элемент View Controller
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/96b/a84/b2c/96ba84b2c091ce37582e35e3200eefa0.png)
и перетаскиваем его поверх основного вида
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/2be/f26/b57/2bef26b57c73d994350add37ab7a06f2.png)
После этого в колонке пиктограмм слева должна добавиться новая пиктограмма, соответствующая нашему контроллеру. Нам необходимо связать наш контроллер с нашим классом controllerView, для этого выделяем объект контроллера и в окне Identity Inspector (правое верхнее окно, см. предыдущий рисунок) из списка классов выбирает controllerView. Для проверки наведем курсор на пиктограмму нашего контроллера в колонке пиктограмм и там должна появиться подпись Controller View.
Теперь берем объект View в библиотеке и перетаскиваем его на наш контроллер.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/583/48f/3d5/58348f3d55b8bb9215a2b5fa06e2d767.png)
И устанавливаем Toolbar, для этого в библиотеке берем объект Toolbar в библиотеке и устанавливаем его в верхней части нашего объекта View. Дважды нажав на кнопку, меняем ее название на «Смена видов».
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/849/3a8/3cb/8493a83cba425542576ab33e9000a2f1.png)
Свяжем объект кнопки с, объявленным нами методом, для этого выделите кнопку, зажмите control и, нажав левую кнопку мыши, перетащите линию на пиктограмму Files's owner и выберите из открывшегося списка метод changeView. Затем выберем иконку My View App App Delegate, зажмем control и левуй кнопку мыши и перетащим линию на иконку Controller View и выберем из открывшегося списка controllerView. Основная часть урока уже позади, теперь еще немного кода, пару связей и все готово.
Изменим файл controllerView.m, добавим туда код метода для смены видов
Файл controllerView.m
#import "controllerView.h"
#import "firstView.h"
#import "secondView.h"
@implementation controllerView
@synthesize FirstView;
@synthesize SecondView;
- (void) viewDidLoad { //метод выполняется при загрузке основного вида
firstView *F1 = [[firstView alloc] //инициализируем первый вид
initWithNibName:@"firstView" bundle:nil];
self.FirstView = F1;
[self.view insertSubview:F1.view atIndex:0]; //делаем его активным
[F1 release];
secondView *S1 = [[secondView alloc] //инициализируем второй вид
initWithNibName:@"secondView" bundle:nil];
self.SecondView = S1;
[S1 release];
[super viewDidLoad];
}
- (IBAction)changeView:(id)sender{
if (self.FirstView.view.superview == nil) { //если первый вид не активен
[SecondView.view removeFromSuperview]; //прячем второй вид
[self.view insertSubview:FirstView.view atIndex:0]; //делаем активным первый
}
else
{
[FirstView.view removeFromSuperview]; //прячем первый вид
[self.view insertSubview:SecondView.view atIndex:0]; //делаем активным второй
}
}
//Здесь находятся все функции созданные в этом файле автоматически, их мы не меняли
- (void) dealloc {
[FirstView release];
[SecondView release];
[super dealloc];
}
@end
Теперь осталось довести до ума наши файлы видов. Выберите файл firstView.xib и добавьте туда место для нашего Toolbar, чтобы он его не перекрывал. Для этого выделите основной вид и окне Simulated Metrics напротив Top Bar выберите Navigation Bar.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/ade/4fd/4e9/ade4fd4e9474a7e177a83ca088c043b5.png)
Затем сделаем этот вид экземпляром класса firstView, для этого, как мы уже делали в основном окне, в окошке Identity Inspector из списка классов выбирает firstView.
![Image Hosted by ImageShack.us](https://habrastorage.org/getpro/habr/post_images/2d1/06e/691/2d106e6919e28689af500bba5a7d7985.png)
И последний штрих. Выбираем иконку File's Owner зажимаем control и левую кнопку мыши и перетаскиваем линию на наш вид, в открывшемся меню выберем View. Далее повторяем эту же процедуру для файла secondView.xib, только его привязываем к классу secondview. Также вносим изменения во внешний вид нашего первого и второго видов, чтоб мы могли отличать их, когда они будут меняться, добавляем какие-нибудь кнопочки или картинки.
На этом все, проект можно запускать и если вы все сделали правильно, то у вас будет приложение с одной действующей кнопкой, которая меняет местами два view.
Идею урока подсмотрел в книге «Beginning iPhone 4 Development Exploring the iOS SDK» David Mark, Jeff LaMarche, Jack Nutting, но реализация и описание мое.