iPhone просмотров во время выполнения? - PullRequest
1 голос
/ 05 марта 2009

Я новичок в iPhone SDK и пытаюсь создать 3 вида и переключаться между ними. Данные будут поступать с сервера, и я в основном буду показывать 1 представление и кэшировать два других. Пока что я просто пытаюсь создать представление и отобразить его во время выполнения. Мой код указан ниже. Он показывает только пустой экран, и я думаю, что мне не хватает ключевой концепции. Любая помощь?

#import <UIKit/UIKit.h>
#import "ImageViewController.h"
@interface Test5ViewController : UIViewController 
{
    IBOutlet UIView *rootView;
    ImageViewController *curImage;
    ImageViewController *nextImage;
    ImageViewController *prevImage;
}

@property(nonatomic,retain) IBOutlet UIView *rootView;
@property(nonatomic,retain) ImageViewController *curImage;
@property(nonatomic,retain) ImageViewController *nextImage;
@property(nonatomic,retain) ImageViewController *prevImage;

@end

и

- (void)loadView 
{

    self.curImage = [[ImageViewController alloc]initWithNibName:@"ImageView" bundle:[NSBundle mainBundle]];
    UIImage *pic = [UIImage imageNamed:@"baby-gorilla.jpg"];
    [self.curImage assignImage:pic];
    self.rootView = self.curImage.view;

}

и

#import <UIKit/UIKit.h>


@interface ImageViewController : UIViewController 
{
    IBOutlet UIImageView *image;
}

-(void)assignImage:(UIImage *)screenShotToSet;


@property(nonatomic,retain) IBOutlet UIImageView *image;

@end

1 Ответ

2 голосов
/ 05 марта 2009

Добро пожаловать в iPhone SDK!

В общем, есть два способа отображения любого вида.

Во-первых, и чаще всего вы используете файл NIB, созданный Интерфейсным Разработчиком. Обычно это самый простой способ начать работу, и я бы порекомендовал его для того, что вы пытаетесь сделать здесь. Это слишком долго, чтобы описать все шаги, которые вам нужно сделать для того, что у вас здесь есть, но в основном начните с xcode, создав новый файл и выбрав «пользовательские интерфейсы» и выбрав View XIB. Это создаст основной файл NIB (они называются NIB, а не XIB по историческим причинам). Первым шагом в построителе интерфейса является изменение имени класса «Владельца файла» на ваш подкласс UIViewController (Test5ViewController). Затем вы можете добавить в окно просмотра все, что разрешит IB, или даже заменить предварительно предоставленный объект представления другим. А вот и хитрость: убедитесь, что выход представления (предоставленный суперклассом UIViewController) подключен к представлению. Как только это будет сделано, это представление будет автоматически загружено при загрузке вашего NIB. Затем вы можете просто поместить свой подкласс UIViewController (Test5ViewController) в файл NIB MainWindow.xib, чтобы автоматически загрузить it , и вы в деле.

Теперь, то, как вы делаете это здесь, это второй способ. Некоторым людям нравится все время писать код, а не конструктор пользовательских интерфейсов. И хотя это определенно необходимо иногда и всегда более гибко, оно помогает вам понять, что происходит немного лучше. Могут быть и другие вещи, но главное, что вы упускаете, это то, что в приведенном выше коде у вас нет ничего, что добавляло бы ваше представление в иерархию представлений. Вы должны сначала проверить, что у вас есть подкласс UIApplicationDelegate, и он должен загрузить ваш «корневой» класс UIViewController. Все первоначальные типы создания проекта в xcode делают это (кроме приложения на основе Windows). Это код как:

[window addSubview:rootController.view];

Как только это будет сделано, если ваш контроллер представления не был загружен NIB (кратко описано выше), будет вызван ваш метод loadView, ожидающий, что вы создадите свою собственную иерархию представления. Выше вы создали представления, но не смогли поместить их в иерархию. Вам нужно что-то вроде:

[self.view addSubview:curImage.view];

Представление не будет отображаться до тех пор, пока оно не будет добавлено в иерархию представлений. Обязательно посмотрите класс UIView в документации и разберитесь во множестве способов добавления и удаления представлений в иерархию представлений.

Несколько вещей, о которых я должен вас предупредить: * Ваш код выше течет. Вы должны рассмотреть, как работают свойства target-C. На этом сайте есть много об этом. Больше чем у меня есть время, чтобы написать здесь. * не создавайте свойство rootView в случае, если вы здесь. Там уже есть один в суперклассе (UIViewController). Это просто «вид». Используйте это для сохранения вашего корневого представления.

Надеюсь, это поможет вам начать. Поначалу это может сбивать с толку, но скоро вы начнете! Я рекомендую собирать, переписывать и перестраивать много примеров кода перед тем, как вы создадите свое «настоящее» приложение. В SDK много замечательных образцов.

...