Добавление UIViewControllers в UIScrollView - PullRequest
1 голос
/ 09 июля 2010

Да, это может быть невозможно, но, может быть, это так ...

У меня есть 3 UIViewControllers, каждый со своими собственными файлами XIB, которые содержат макет для каждого слайда презентации (каждый слайд будет содержать видео, изображения, другие интерактивные элементы). Я подключил их все к UIScrollView, добавив их один за другим, см. Ниже:

page1 *vc = [[page1 alloc] initWithNibName:@"page1" bundle:nil];
vc.view.frame = CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f);
[sv addSubview:vc.view];
[vc release];
page2 *vc2 = [[page2 alloc] initWithNibName:@"page2" bundle:nil];
vc.view.frame = CGRectMake(1024.0f, 0.0f, 1024.0f, 768.0f);
[sv addSubview:vc2.view];
[vc2 release];
page3 *vc3 = [[page3 alloc] initWithNibName:@"page3" bundle:nil];
vc.view.frame = CGRectMake(2 * 1024.0f, 0.0f, 1024.0f, 768.0f);
[sv addSubview:vc3.view];
[vc3 release];

То, что я хочу сделать, - это создать массив UIViewController и зацикливать массив, чтобы добавлять их, а не один за другим. Во-первых, я не могу создать массив UIViewControllers, мой код выглядит следующим образом:

NSArray *pages = [[NSArray alloc] initWithObjects:page1, page2, page3, nil];

и ошибка: ожидаемое выражение перед 'page1'.

Мне удалось загрузить UIViewControllers с помощью следующего кода:

for (int i = 1; i <= 3; i++) {
    UIViewController *vc = [[UIViewController alloc] initWithNibName:[NSString         stringWithFormat:@"page%i", i] bundle:nil];
    vc.view.frame = CGRectMake((i-1) * 1024.0f, 0.0f, 1024.0f, 768.0f);
    [sv addSubview:vc.view];
    [vc release];
}

Но несмотря на то, что отображалось содержимое из XIB, функция viewDidLoad загруженных в UIViewControllers никогда не запускается.

Итак, есть ли у кого-нибудь советы по загрузке массива UIViewControllers в UIScrollView?

Спасибо!

1 Ответ

0 голосов
/ 09 июля 2010

Что такое page1 *vc? Является ли page1 именем вашего пользовательского класса контроллера представления? Он должен начинаться с заглавной буквы, т.е. Page1ViewController *vc.

Вашему массиву нужны экземпляры классов, а не сами классы.

NSArray *pages = [[NSArray alloc] initWithObjects:vc, vc2, vc3, nil];

Но тогда вы не должны освобождать контроллеры представления, пока не добавите их в массив страниц, то есть поместите [vc release]; [vc2 release]; и т. Д. после вашего NSArray *pages = ...;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...