2013-07-31 37 views
8

Tôi có một UIScrollView (với phân trang) mà tôi thêm ba UIViews. Mỗi UIViews có một UITableView bên trong. Vì vậy, người dùng sẽ có thể cuộn theo chiều ngang đến trang mà anh ta muốn và sau đó cuộn theo chiều dọc trong bảng tương ứng.Các vấn đề cuộn UITableView khi bên trong UIScrollView

Tuy nhiên, một số bảng không nhận được cử chỉ cuộn. Thông thường, cái đầu tiên hoạt động tốt, nhưng những cái kia thì không. Tôi không thể chọn ô hoặc cuộn bảng lên hoặc xuống.

tôi đã sử dụng các thiết lập mặc định cho UIScrollView, ngoại trừ những người quy định tại các viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Load the view controllers 
    [self loadViewControllers]; 

    //Configure the scroll view 
    self.scrollView.pagingEnabled = YES; 
    self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.scrollView.frame) * viewControllers.count, CGRectGetHeight(self.scrollView.frame)); 
    self.scrollView.showsHorizontalScrollIndicator = NO; 
    self.scrollView.showsVerticalScrollIndicator = NO; 
    self.scrollView.scrollsToTop = NO; 
    self.scrollView.delegate = self; 

    //Configure the page control 
    self.pageControl.numberOfPages = viewControllers.count; 
    self.pageControl.currentPage = 0; 
} 

tôi không thể tìm ra lý do tại sao tôi không thể di chuyển một số các bảng ... Bất kỳ sự giúp đỡ sẽ được đánh giá cao.

Cảm ơn trước!

Trả lời

2

Những điều tôi sẽ kiểm tra:

  1. Kiểm tra Xem các tầng nấc của bạn - là một cái gì đó được đặt trên đầu trang của UITableView của bạn, khiến nó không nhận một vòi nước?
  2. UITableView của bạn có bị vô hiệu hóa ở mọi nơi không? Tôi sẽ thiết lập một breakpoint trong tableView:didSelectRowAtIndexPath: và xem nếu phương pháp đó đang được gọi.
  3. Kiểm tra this post

Tôi đoán những không chắc chắn bắn câu trả lời nhưng hy vọng họ sẽ giúp khám phá ra vấn đề!

+0

Hmm, tôi không có bất kỳ chế độ xem nào khác.Các hệ thống phân cấp hiện nay là một cái gì đó như thế này: UIView - UIScrollView --- UIView ----- UITableView Tuy nhiên, bạn hoàn toàn đúng ... tableView: didSelectRowAtIndexPath không được gọi trong cuộn "cố gắng". Nhưng tôi không vô hiệu hóa nó (cố ý ít nhất). Bất kỳ ý tưởng tại sao nó sẽ bị vô hiệu hóa? – Sagito

+0

Có bất kỳ phương thức đại biểu/nguồn dữ liệu nào được gọi cho UITableView của bạn không? – hgwhittle

+1

Có, tôi có một UIViewController cho mỗi UITableView đó là cả hai đại biểu và nguồn dữ liệu của các bảng. – Sagito

4

Cố gắng thiết lập

self.scrollView.delaysContentTouches = YES; 
self.scrollView.canCancelContentTouches = NO; 

lẽ UIScrollView không vượt qua thông tin liên lạc đến subviews.

+0

Tôi đã thử giải pháp đó thông qua trình tạo giao diện nhưng không hoạt động. Tôi có nên làm điều đó trong mã hoặc là nó giống nhau không? – Sagito

4

Tôi đã cố gắng tái tạo một phiên bản đơn giản hóa nhu cầu của bạn bằng cách sử dụng Trình tạo giao diện cơ bản và dường như tôi đang làm việc bằng cách sử dụng mã hóa cơ bản và sử dụng cài đặt mặc định. Bạn có thể kiểm tra nhanh chóng của tôi n bẩn Github repo và vui lòng yêu cầu để trả lời cho dù đó là áp dụng cho tình hình của bạn hoặc những gì còn thiếu.

https://github.com/codedad/SO_ScrollView_with_Tables

By Giao diện mặc định Builder tạo UIScrollView và UITableViews phép:

  • chậm trễ Chạm Content ON
  • Chạm Content hủy ON
+0

Cảm ơn! Tôi sẽ cố gắng này và lấy lại cho bạn! :-) – Sagito

+0

Tôi không sử dụng bộ điều khiển xem riêng biệt cho tất cả các bảng vì một bộ điều khiển xem hoạt động như nguồn dữ liệu cho tất cả các bảng là đủ để bạn có thể sử dụng tham số 'tableView' cả trong cellForRowAtIndexPath và numberOfRowsInSection để phân biệt các bảng khác nhau. – nzs

+0

Vâng, có vẻ như cả bạn và @ hw731 đều đúng vì trong ví dụ của bạn và trong liên kết được đăng bởi hw371 sự khác biệt là ở kích thước UITableView. Bảng của tôi là một vài điểm ảnh quá lớn trong khi trong ví dụ của bạn họ phù hợp một cách chính xác và đó dường như là vấn đề với mã của tôi. :-) Cảm ơn bạn rất nhiều! – Sagito

0

này làm việc cho tôi

Tôi lập trình ally đã thêm bảngView vào chế độ xem cuộn của tôi bằng cách sử dụng addSubview:

UIGestureRecognizerDelegate là cần thiết.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    if ([touch.view isDescendantOfView:self.signUpJammerList]) { 

     return NO; 
    } 
    return YES; 
} 
Các vấn đề liên quan