1

私は iPhone 開発に不慣れで、このチュートリアルに取り組んでいます: http://www.iosdevnotes.com/2011/03/uiscrollview-paging/#comment-25166 - しかし、XCode 4.3.2 でやっています。例は非常に単純で、コードは理解できますが、何らかの理由で、viewController.m で scrollViewDidScroll 関数が起動しません (したがって、ページ コントロールのページネーション アイコンが変更されず、現在のページに更新されません)。この関数に NSLog() を配置したので、アクティブ化されているかどうかがわかりますが、デバッグコンソールにはこのテキストが表示されません

私の ViewController.h のコードは次のとおりです。

 #import <UIKit/UIKit.h>

 @interface ViewController : UIViewController <UIScrollViewDelegate> {
     UIScrollView* scrollView;
     UIPageControl* pageControl;

 }

 @property (nonatomic, retain) IBOutlet UIScrollView* scrollView;
 @property (nonatomic, retain) IBOutlet UIPageControl* pageControl;

 @end

私の ViewController.m のコードは次のとおりです。

 #import "ViewController.h"
 @implementation ViewController
 @synthesize scrollView, pageControl;

 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
 - (void)viewDidLoad {
     [super viewDidLoad];


NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
for (int i = 0; i < colors.count; i++) {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UIView *subview = [[UIView alloc] initWithFrame:frame];
    subview.backgroundColor = [colors objectAtIndex:i];
    [self.scrollView addSubview:subview];
    [subview release];
}

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * colors.count, self.scrollView.frame.size.height);

self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = colors.count;
 }


 //!!!!!!!!!!!!!!
 //THIS IS WHERE MY PROBLEM IS -- THIS CODE DOESN'T SEEM TO EVER GET RUN EVEN WHEN I SCROLL!!!!!
 //!!!!!!!!!!!!!
 - (void)scrollViewDidScroll:(UIScrollView *)sender {
     NSLog(@"this just fired");

     // Switch the indicator when more than 50% of the previous/next page is visible
     CGFloat pageWidth = self.scrollView.frame.size.width;
     int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
     self.pageControl.currentPage = page;
 }


 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
 }

 - (void)viewDidUnload {
    self.scrollView = nil;
    self.pageControl = nil;
 }


 - (void)dealloc {
     [scrollView release];
     [pageControl release];
     [super dealloc];
 }

 @end

どんな助けでも大歓迎です。チュートリアルにあるダウンロード可能なファイルから自分のファイルに何度も何度も行き来しています...スクロールを開始すると、このことが起動するはずで、なぜそうでないのかわかりません...前もって感謝します!

4

4 に答える 4

7

Interface Builder では、スクロール ビューの「デリゲート」アウトレットをビュー コントローラーに接続していません。しかし、プログラムでそれを行うことができます。

[self.scrollView setDelegate:self];
于 2012-06-09T05:41:11.203 に答える
0

scrollviewデリゲートが目的のviewcontrollerに設定されていることを確認してください。スクロールビューがxibに追加されている場合は、デリゲートをxibファイルに添付することもできます。

また、viewcontrollerのヘッダーファイルにscrollviewデリゲートプロトコルUIScrollViewDelegateを実装することを忘れないでください。

于 2012-06-09T07:16:09.487 に答える
0

ディアンツはそうです、デリゲートを設定してください。

[self.scrollView setDelegate:self];

また

self.scrollView.delegate=self;
于 2012-06-09T05:48:53.107 に答える
0

デリゲートを設定するのを忘れました:

 - (void)viewDidLoad {
 [super viewDidLoad];

// This is what you forgot to do, set the delegate of the scrollView.
scrollView.delegate = self;

NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
for (int i = 0; i < colors.count; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;

UIView *subview = [[UIView alloc] initWithFrame:frame];
subview.backgroundColor = [colors objectAtIndex:i];
[self.scrollView addSubview:subview];
[subview release];
}
于 2012-06-09T05:58:42.413 に答える