2013-03-12 26 views
6

Tôi đang tìm kiếm để tạo ra một bảng có các tính năng sau:Chế độ xem bảng có các cột có thể khóa và cuộn ngang?

  • Số lượng các cột cuộn theo chiều ngang với phần còn lại của bàn
  • Số lượng các cột có thể khóa mà không di chuyển theo chiều ngang với phần còn lại của bảng
  • tiêu đề cột Sortable
  • Scrolls theo chiều dọc
  • Cuộn theo chiều ngang

Tôi đã thấy những người sử dụng các chiến lược khác nhau để thực hiện chức năng tương tự bao gồm:

  1. UITableView với từng ô trong bảng có chứa một UITableView chuyển 90 độ đặt bên của một UIScrollView để xử lý các cuộn ngang. Đối với điều này để làm việc tuy nhiên tôi sẽ cần phải sử dụng bị khóa tableviews xoay cho mỗi tế bào và nó có vẻ như sẽ có một số funkiness với cell dequeing nếu tôi muốn di chuyển toàn bộ bảng chính thay vì bảng trong mỗi tế bào bảng.
  2. Biến thể của số một nhưng sử dụng uiview tùy chỉnh thay vì một uitableview cho mỗi tablecell. (ứng cử viên hàng đầu cho đến nay)
  3. Lớp UIScrollview tùy chỉnh sao chép chức năng của UITableview với các tính năng bổ sung như MDSpreadView. Có vẻ như linh hoạt và khó thực hiện nhất.

Có ai có bất kỳ ví dụ/đề xuất/lời khuyên nào về nội dung cần xem xét một cách hợp lý để dễ dàng thiết lập và chạy, hiệu suất cuộn tuyệt vời và linh hoạt.

Tôi vẫn đang trong giai đoạn lập kế hoạch, cố gắng tìm ra cách tốt nhất để giải quyết vấn đề này và đã đưa ra một số ý tưởng cho đến nay, bao gồm hai bài kiểm tra có thể cuộn được đồng bộ hóa. Chế độ xem bảng bên trái sẽ được sử dụng cho các cột bị khóa và bảng bên phải sẽ được sử dụng cho bảng cuộn ngang. Cả hai bảng sẽ sử dụng cùng một uiviews như tablecell với các đối tượng uiview tùy chỉnh cho mỗi cột.

enter image description here

CẬP NHẬT

Nó có vẻ khá thẳng về phía trước để có thể đồng bộ hóa các di chuyển giữa các cột khóa và bảng theo chiều ngang di chuyển và cho đến nay điều này dường như là lựa chọn tôi đang nghiêng về phía (# 2 ở trên). Có ai nhìn thấy bất kỳ cạm bẫy tiềm ẩn hoặc rào chắn với phương pháp này?

Một ví dụ tuyệt vời của sản phẩm đã hoàn thành mong muốn tôi sau có thể được tìm thấy trong App Roambi (ảnh chụp màn hình bên dưới)

enter image description here

Thx

+0

Chúng tôi có tất cả các tính năng này được tích hợp trong sản phẩm của chúng tôi: http://www.ioscomponents.com/Home/IOSDataGrid –

Trả lời

1

Tôi đã làm điều này trong một trong những của riêng tôi ứng dụng - xem MDSpreadView. Các cuộc gọi đại biểu/nguồn dữ liệu của nó giống như các cuộc gọi của UITableView.

+0

Vâng, tôi đã xem qua thư viện này mặc dù dường như không sắp xếp các cột bị khóa. Có vẻ như nó có thể mất nhiều công sức để thực hiện tính năng đó sau đó cố gắng để cuộn của riêng tôi? –

+0

@ s.newave Bạn sẽ phải cuộn giải pháp của riêng bạn cho vấn đề đó - giống như với một UITableView cũ đơn giản. – Undo

1

Tôi đã đạt được điều này với ba chế độ xem, được quản lý thông qua giao thức chuẩn và bộ điều khiển chế độ xem đơn. Trong giải pháp này, bạn chỉ quan tâm đến việc liên kết cuộn dọc của hai bộ điều khiển xem bảng. Cuộn ngang đi kèm miễn phí thông qua chế độ xem cuộn bao quanh phần thân của bảng. Tôi sử dụng chức năng UITableViewDelegate sau để có tiêu đề cột khóa:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; 

enter image description here

Xem cấu:

- View - The VCs root view 
    - Table View  - rowHeadersTable     - the locked left hand columns 
    - Scroll View - rowBodyHorizontalScrollView  - a container of the table body 
    - Table View - rowBodyVerticalContentTableView - the table body, as wide as it needs to be beyond the frame of the parent scroll view 

View Controller:

giao thức thực hiện:

@interface LockedTableColumnsViewController : UIViewController <UITableViewDataSource,UITableViewDelegate> 

Setup:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    [self.rowHeadersTable     setDataSource:self]; 
    [self.rowHeadersTable     setDelegate:self]; 

    [self.rowBodyVerticalContentTableView setDataSource:self]; 
    [self.rowBodyVerticalContentTableView setDelegate:self]; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    // This ensures the scroll view can only scroll horizontally, and adapts to the size of its member content 
    [self.rowBodyHorizontalScrollView setContentSize:self.rowBodyVerticalContentTableView.frame.size]; // Important to do this here rather than viewDidLoad, because we want a final reading on self.rowBodyVerticalContentTableView.frame.size 

    [super viewDidAppear:animated]; 
} 

// Do your Table Data Source however you choose 

Quản lý cuộn dọc liên kết giữa rowHeadersTable và rowBodyVerticalContentTableView:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView == self.rowBodyVerticalContentTableView) { 
     [self.rowHeadersTable setContentOffset:CGPointMake(self.rowHeadersTable.contentOffset.x, scrollView.contentOffset.y)]; 
    } 
    else if (scrollView == self.rowHeadersTable) { 
     [self.rowBodyVerticalContentTableView setContentOffset:CGPointMake(self.rowBodyVerticalContentTableView.contentOffset.x, scrollView.contentOffset.y)]; 
    } 
} 

N.B. Điều này sẽ thực hiện độc đáo cho các bảng dài (có nghĩa là cao) kể từ khi nó sử dụng các tế bào nguyên mẫu vv Tuy nhiên nó không tối ưu hóa cho nội dung hàng theo chiều ngang. Nội dung bảng của tôi là văn bản và số lượng cột hữu hạn. Nếu bạn không có sự sang trọng đó, bạn luôn có thể làm cho thân hình bảng của bạn có chế độ xem bộ sưu tập theo chiều ngang, nhưng sau đó bạn phải liên kết tất cả các bù nhìn của bộ sưu tập hàng (thông qua các ô hiển thị mà tôi đoán). Đó là một con vật khác. Chúc may mắn!

1

Nếu hệ điều hành đích của bạn lớn hơn iOS 6.0, bạn có thể sử dụng quảng cáo lượt xem bảng lồng nhau được mô tả here. Đừng quên đồng bộ hóa bù đắp nội dung của mỗi bảng ngang.

Nhưng nếu bạn nhắm mục tiêu iOS 6.0+, bạn có thể sử dụng MMSpreadsheetView, nhưng hiệu suất của nó rất xấu và bạn không được phép đặt các kích thước khác nhau cho các cột của nó.

Tùy chọn tốt nhất bạn có là viết bố cục UICollectionView của riêng bạn.

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