UIScrollView не будет отображаться в UIView - PullRequest
0 голосов
/ 31 марта 2011

Мое приложение строится исключительно программно на UITabBarController выше UINavigationController, которые оба объявлены в моем AppDelegate.Внутри моего контроллера навигации я показываю пользовательский класс UIViewController.Этот пользовательский класс должен отображать пользовательский UIView в UIScrollView и UIPageControl.

Вот моя проблема:
self.view , кажется, создает ошибку EXC_BAD_ACCESS , когдаЯ называю это без объявления self.view = [[UIView alloc] init] (или аналогичный).Мне было интересно, если это было проблемой с - (void) loadView , но похоже, что он выдает ту же ошибку в - (void) viewDidLoad .Поэтому мне пришлось использовать self.view = scrollView , чтобы даже показать мой scrollView, учитывая, что [self.view addSubview: scrollView] выдало ошибку.Мой UIPageControl должен оставаться на странице все время и фактически быть другой частью представления, чем UIScrollView.Поэтому я попытался добавить контейнерный вид, подобный этому

Код:

container = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,0,0)];
scrollView.pagingEnabled = YES;  
scrollView.showsVerticalScrollIndicator = NO;  
scrollView.showsHorizontalScrollIndicator = NO;  
// EDIT: ofcourse, I'm also resizing the frame with [scrollView setContentSize:] later, but this is farfetched code to add here.

[container addSubview:scrollView];
self.view = container;

К сожалению, кажется, что я вообще ничего не получил, и то, что кажется пустымПосмотреть.Однако, если я добавляю UILabel или подобное, оно показывает:

[container addSubview:[[UILabel alloc] initWithFrame:CGRectMake(50,50,50,50)]];  // entered above or beneath the addSubview:scrollView line.  

Мой вопрос: почему мой scrollView не появляется в контейнере UIView?

Я заметил, что некоторыеВ руководствах говорится, что scrollView должен иметь делегата, и я согласен с логикой - однако я не могу понять, как установить этот делегат, когда я нахожусь в своем классе CustomUIViewController вместо моего AppDelegate.

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Хорошо, проблема, казалось, была в инициализации - я не осознавал, что фрейм и контент - это две разные вещи.Похоже, что кадр, который инициализирует представление, должен быть любого размера, который должен заполнять представление, в то время как содержимое - это фактическое содержимое того, что должно быть прокручено.Поэтому, когда у меня были проблемы с взаимодействием с пользователем, это было действительно так.

Проблема того, почему он не показывал, в первую очередь (глупо), что кадр изначально был и никогда не менялся,0,0, поэтому я действительно соврал в своем первом посте.

Благодаря UIScrollView и PageControl: пространство между представлениями , которые решили мою проблему с взаимодействием с пользователем.

Мои шаги быливернуться из self.view:
NSLog (@ "% f \ n% f", ((UIScrollView *) [[self.view subviews] objectAtIndex: 0]). frame.size.width, ((UIScrollView *) [[self.view subviews] objectAtIndex: 0]). frame.size.height);

когда я понял, что это 0 и 0, исправить проблему было не слишком сложно :) спасибо, хотя и затвои старания кристиан.

1 голос
/ 31 марта 2011

после изменения размера UIScrollView, который вы должны использовать:

[scrollView setNeedsDisplay:YES];

также вы реализуете делегатов так же, как и в других классах:

.h:

@interface MyClass : NSObject <UIScrollViewDelegate>

...