2012-03-02 24 views
8

Cách chính xác nhất để lấy tiêu đề hoặc chỉ mục của phần nhiều nhất trong UITableView là gì? Tôi không có nghĩa là phần tại chỉ mục 0, nhưng tiêu đề phần hiện được ghim ở trên cùng trong khi cuộn.Nhận phần được ghim hiện tại của UITableView

Trả lời

13

Bạn có thể lấy phần ở phía trên cùng của màn hình như vậy:

 NSUInteger sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section]; 

Nhưng, phương pháp này có thể không được tối ưu cho bạn vì nó sẽ nhận được số sẽ lạ khi nó đang trong giai đoạn chuyển tiếp giữa hai tiêu đề. Miễn là bạn không cần phải biết phần trong quá trình chuyển đổi, bạn sẽ ổn thôi. Tôi hy vọng đây là những gì bạn đang tìm kiếm,

+0

phương pháp gì tôi nên đặt ở đây để giữ sectionNumber hiện tại? – Bot

+0

Scrollviewdidscroll nếu bạn muốn nó cập nhật mỗi lần người dùng cuộn –

+1

Rực rỡ, cảm ơn! – devios1

-1

Yêu cầu lớp của bạn triển khai UIScrollViewDelegate và triển khai các chức năng sau. Nó sẽ đảm bảo bạn chỉ truy xuất phần khi chế độ xem bảng ngừng cuộn.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
} 
+0

Tôi đoán bằng cách làm theo cách này, nó ngăn cản vấn đề của các phần bị lẫn lộn khi chúng đang chuyển đổi? – Bot

+0

Điều này sẽ ném lỗi với ô tùy chỉnh của tôi vì một số lý do ... '- [Phần cuộc hẹn chỉ địnhCustomCell]: bộ chọn không được nhận dạng được gửi tới trường hợp 0x89af850'. Tất cả những gì tôi đang làm là NSLogging phần trong đoạn mã trên bạn đã cung cấp. – Bot

+0

Đây là cũ nhưng tất cả các loại sai vì 'self.tableView visibleCells' cho' UITableViewCells' và không 'IndexPaths'. Sau khi nhận được indexPaths, sau đó chúng ta có thể làm indexPaths [0] .section. – esh

3

tôi tin rằng thay vì truy vấn cho các visibleCells, nó tốt hơn để hỏi cho các đường dẫn chỉ số theo cách sau:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section]; 

Bạn có thể sử dụng mã này trong một trong những UIScrollViewDelegate phương pháp theo của bạn nhu cầu.

1

phiên bản Swift

Sử dụng đầu tiên (hiện pinned) hoặc cuối cùng (hiển thị cuối cùng)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section { 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true) 

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