2009-11-29 29 views
10

Tôi cần sử dụng UIPagecontrol cho đơn đăng ký của mình và tôi không chắc chắn cách bắt đầu. Tôi là người mới bắt đầu, và những ví dụ mà táo mang lại cho tôi khá phức tạp. Tất cả tôi cần là 3 trang với quan điểm khác nhau cho mỗi người trong số họ. Có ai có thể giúp tôi ngoài này không?Làm cách nào để sử dụng UIPageControl để tạo nhiều chế độ xem?

P.S. hãy nhớ rằng tôi là người mới bắt đầu!

Trả lời

3

Đây là một hình ảnh đẹp example từ Cocoa With Love. Nó chỉ tái sử dụng 2 lượt xem thực tế, cho một dấu chân bộ nhớ thấp đẹp.

+0

Tôi xin lỗi vì downvote, bây giờ liên kết đang hoạt động trở lại. – hariseldon78

22

Bạn sẽ muốn sử dụng một UIScrollView, và sau đó, như một anh chị em, vị trí UIPageControl trên nó. Sau đó, đặt từng trang của bạn vào chế độ xem cuộn và chuyển trang cho nó. Bằng cách này, mỗi 'flick' sẽ di chuyển trang xem một trang.

Bây giờ, hãy gán bộ điều khiển chế độ xem của bạn làm đại biểu của chế độ xem cuộn và xem cho scrollViewDidEndScrollAnimation và sử dụng contentOffset để xác định trang nào hiện tại.

+4

wow có vẻ phức tạp. Bạn có một hướng dẫn để làm điều này hoặc một mã mẫu để tôi có thể nhìn thấy nó trông như thế nào? – lab12

1

Xem câu trả lời của tôi ở đây: Is UIPageControl Useless By Itself?

cho một lớp thể tái sử dụng đóng gói UIPageControl và UIScrollView.

+0

Xin chào, có vẻ như bạn đã làm một công việc rất tốt khi tạo lớp học này. Tôi là một người mới bắt đầu và tôi không thể hoàn toàn quấn quanh đầu của bạn như thế nào bạn đi về nói cho nó mà UIviews được bao gồm (tôi đã đặt chúng ra trong IB.) – Hippocrates

+0

Bạn sẽ phải thực hiện PagedViewDelegate chỉ trong cùng một cách bạn sẽ thực hiện một UITableViewDelegate. Phương thức cellForRowAtIndexPath bây giờ được thay thế bằng viewForPageAtIndex. Bạn có thể thực hiện nó với một câu lệnh switch và tải khung nhìn từ ngòi thích hợp bằng [[NSBundle mainBundle] loadNibNamed: owner: nil] –

15

Dựa trên câu trả lời hoàn toàn chính xác của Ben Gottlieb ở đó, tôi có những gì tôi muốn. Dưới đây là đoạn code tôi sử dụng để thực hiện nó:

.h

@interface MyViewController : UIViewController <UIScrollViewDelegate> { 
} 
@property (nonatomic, retain) UIPageControl *helpPageCon; 

.m

@synthesize helpPageCon; 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    float roundedValue = round(scrollView.contentOffset.x/frame.size.width); 
    self.helpPageCon.currentPage = roundedValue;  
} 

- (void)viewDidLoad 
{ 
    UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height-50)] autorelease]; 
    scrollView.contentSize = CGSizeMake(frame.size.width*5, frame.size.height-50); 
    [scrollView setPagingEnabled:YES]; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.delegate = self; 
    [self.view addSubview:scrollView]; 

    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    self.helpPageCon = [[[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 50)] autorelease]; 
    self.helpPageCon.center = CGPointMake(frame.size.width/2, frame.size.height-75); 
    self.helpPageCon.numberOfPages = 5; 
    [self.view addSubview:self.helpPageCon]; 
} 
- (void)dealloc 
{ 
    [super dealloc]; 
    [helpPageCon release]; 
} 
3

Chỉ cần thêm 3 điểm để xem Scroll ngang một sau khi khác với phân trang cho phép trong scrollview và thêm một điều khiển UIPageControl bên dưới scrollView, Và với sự trợ giúp của cả hai phương thức đại biểu của scrollview và phương pháp Hành động của lần truy cập trang, bạn có thể đạt được hoạt động cơ bản của UIPageControl

Tôi đã sử dụng contentoffset để tìm trang hiện tại

// scrollview delegate 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 

    CGFloat pageWidth = mainScroll.frame.size.width; 
    int page = floor((mainScroll.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage=page; 

    } 

    // page view action method 

    - (IBAction)pageControlInteracted:(UIPageControl *)sender { 
     NSLog(@"%d",sender.currentPage); 
     CGRect frame = mainScroll.frame; 
     frame.origin.x = frame.size.width * sender.currentPage; 
     frame.origin.y = 0; 
     [mainScroll scrollRectToVisible:frame animated:YES]; 

    } 
Các vấn đề liên quan