0

私のアプリは、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クラスにいる場合、そのデリゲートをどのように設定したかがわかりません。

4

2 に答える 2

1

UIScrollViewのサイズを変更した後は、次を使用する必要があります。

[scrollView setNeedsDisplay:YES];

また、他のクラスと同じ方法でデリゲートを実装します。

.h:

@interface MyClass : NSObject <UIScrollViewDelegate>

于 2011-03-31T11:13:50.163 に答える
1

さて、問題は初期化にあるように見えました-私はフレームとコンテンツが2つの異なるものであることに気づいていませんでした。ビューを初期化するフレームは、ビューが埋めるサイズに関係なく、コンテンツはスクロールする必要のある実際のコンテンツであるように見えます。ですから、ユーザーの操作に問題があったとき、それは本当にこれでした。

そもそもなぜ表示されなかったのかという問題は、フレームが最初は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であることに気付いたとき、問題の修正はそれほど難しくありませんでした:)しかし、クリスチャンの努力に感謝します。

于 2011-03-31T12:26:42.587 に答える