私のアプリは、UINavigationControllerの上のUITabBarController上で純粋にプログラムで構築されています。これらは両方とも私のAppDelegateで宣言されています。ナビゲーションコントローラー内に、カスタムクラスであるUIViewControllerを表示しています。このカスタムクラスは、UIScrollViewおよびUIPageControlにカスタムUIViewを表示する必要があります。
ここに私の問題があります:
self.view = [[UIView alloc] init](または同様のもの)を宣言せずに呼び出すと、self.viewはEXC_BAD_ACCESSエラーを作成するようです。これが-(void)loadViewの問題であるかどうか疑問に思いましたが、 -(void)viewDidLoadでも同じエラーが発生するようです。したがって、 [self.view addSubview:scrollView]でエラーが発生したことを考慮して、基本的にself.view=scrollViewを使用して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にはデリゲートが必要であると記載されており、ロジックに同意します。ただし、AppDelegateではなくCustomUIViewControllerクラスにいる場合、そのデリゲートをどのように設定したかがわかりません。