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
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,
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];
}
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
Đ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
Đâ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
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.
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)
}
phương pháp gì tôi nên đặt ở đây để giữ sectionNumber hiện tại? – Bot
Scrollviewdidscroll nếu bạn muốn nó cập nhật mỗi lần người dùng cuộn –
Rực rỡ, cảm ơn! – devios1