4

페이지 컨트롤을 사용하여 여러 viewController 사이를 전환하고 싶습니다. 나는 관련된 nib에 UIScrollView와 UIPageControl이 들어있는 다음과 같은 viewController를 가지고있다. 난 둘 다 컨트롤을 볼 수있는 방법으로 엑스 코드의 IB를 사용하여 페이지 컨트롤 위의 스크롤 뷰를 배치 한, 이것은 .H 파일입니다 있습니다UIScrollView와 결합 할 때 UIPageControl이 표시되지 않음

@interface NewForm : UIViewController <UIScrollViewDelegate> 
{ 
    BOOL pageControlUsed; 
} 
@property (nonatomic, retain) IBOutlet UIScrollView *scrollView; 
@property (nonatomic, strong) IBOutlet UIPageControl *pageControl; 
@property (nonatomic, retain) NSMutableArray *viewControllers; 

- (IBAction)changePage:(id)sender; 

@end 

보기있는 ScrollView 콘센트 파일의 소유자뿐만 아니라 스크롤 뷰의 위임에 링크되어 있습니다. pageControl 콘센트 및 changePage은 UIPageControl에 연결됩니다.

은 (실제로에만 관련 방법)을하는 .m 파일입니다 : 나는 응용 프로그램을 실행하면

@implementation STNewAccountTest 
@synthesize scrollView, viewControllers, pageControl; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSMutableArray *controllers = [[NSMutableArray alloc] init]; 
[controllers addObject:[[Page1 alloc] initWithNibName:@"Page1" bundle:nil]]; 
[controllers addObject:[[Page2 alloc] initWithNibName:@"Page2" bundle:nil]]; 
self.viewControllers = controllers; 

scrollView.pagingEnabled = YES; 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * numberOfPages, scrollView.frame.size.height); 
scrollView.showsHorizontalScrollIndicator = NO; 
scrollView.showsVerticalScrollIndicator = NO; 
scrollView.scrollsToTop = NO; 
scrollView.delegate = self; 

self.pageControl.currentPage = 0; 
self.pageControl.numberOfPages = numberOfPages; 

[self loadScrollViewWithPage:0]; 
} 

- (void)loadScrollViewWithPage:(int)page 
{ 
    if ((page < 0) || (page >= numberOfPages)) 
    return; 

    Page1 *controller1 = nil; 
    Page2 *controller2 = nil; 

    if (page == 0) { 
    controller = [self.viewControllers objectAtIndex:page]; 

    if (controller == nil) { 
     controller = [[Page1 alloc] initWithNibName:@"Page1" bundle:nil]; 
     [self.viewControllers replaceObjectAtIndex:page withObject:controller]; 
    } 
} 
if (page == 1) { 
    controller = [self.viewControllers objectAtIndex:page]; 

    if (controller == nil) { 
     controller = [[Page2 alloc] initWithNibName:@"Page2" bundle:nil]; 
     [self.viewControllers replaceObjectAtIndex:page withObject:controller]; 
    } 
} 

if (controller.view.superview == nil) 
{ 
    CGRect frame = self.scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [self.scrollView addSubview:controller.view]; 
} 
} 

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    if (pageControlUsed) 
    { 
    return; 
    } 

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

    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling) 
    [self loadScrollViewWithPage:page - 1]; 
    [self loadScrollViewWithPage:page]; 
    [self loadScrollViewWithPage:page + 1]; 
} 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    pageControlUsed = NO; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    pageControlUsed = NO; 
} 

- (IBAction)changePage:(id)sender 
{ 
    int page = pageControl.currentPage; 

    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling) 
    [self loadScrollViewWithPage:page - 1]; 
    [self loadScrollViewWithPage:page]; 
    [self loadScrollViewWithPage:page + 1]; 

// update the scroll view to the appropriate page 
    CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    [scrollView scrollRectToVisible:frame animated:YES]; 

// Set the boolean used when scrolls originate from the UIPageControl 
    pageControlUsed = YES; 
} 

, 제가 참조 페이지 '뷰가 전체 화면을 차지, 나는 수 있어요 것입니다 스크롤보기의 페이징 기능을 통해 페이지를 탐색하지만 페이지 컨트롤과 점은 표시되지 않습니다. 나는 무엇을 놓칠 수 있습니까?

감사합니다.

답변

0

IB의 오브젝트의 색상 또는 순서입니다.

0

xid의 ScrollView 밖에 페이지 컨트롤러를 놓고 페이지 컨트롤러에 적절한 색상을 지정하십시오.

0

나는 이것을 알아 내려고 며칠을 보냈는데 웹에서 해결할 해결책을 찾지 못했습니다. 여기 나를 맞았는데 실제로 나를 위해 일했습니다. UIScroll View가 전체 View Controller를 차지할 수 있으므로 페이지 컨트롤을 덮고 있습니다. 스크롤보기를 조금 짧게하면 페이지 컨트롤이 분명히 표시됩니다. 끊김없는 마무리를 위해 페이지 컨트롤의 배경을 View Controller의 배경과 일치시킵니다.

관련 문제