2011-10-13 26 views
22

Tôi có một UITableView với nhiều phần. Mỗi phần có tiêu đề phần (chế độ xem tùy chỉnh) có cách dễ dàng để phát hiện khi ai đó chọn tiêu đề phần không? (Giống như didSelectRowAtIndexPath, nhưng đối với tiêu đề?)uitableviewcontroller chọn tiêu đề cho phần

Cảm ơn bạn trước.

Trả lời

24

Không có cách nào để thực hiện việc này với UITableViewDelegate.

Điều bạn có thể làm là thêm nút có kích thước của chế độ xem tiêu đề mục và thêm nút đó vào chế độ xem. Đặt thẻ của nút thành chỉ mục phần. Sau đó, chỉ cần thêm UIViewController làm mục tiêu cho UIControlEventTouchUpInside.

Sau đó, bằng cách xem thẻ của nút, bạn có thể xem phần nào được nhấp.

+0

Hoặc bạn chỉ có thể trả về một UIButton của kích thước tiêu đề trong "viewForHeaderInSection" phương pháp, thay vì thêm nó một cái nhìn và trả lại nó –

60

Đây không phải là hoàn toàn khác với câu trả lời @rckoenes, nhưng nó cung cấp một cách chính thống hơn để xử lý sự kiện trên chế độ xem thay vì sử dụng các nút ẩn.

Tôi thà thêm một UITapGestureRecognizer để xem tiêu đề của tôi thay vì thêm nút vô hình và thay đổi kích thước chúng:

UITapGestureRecognizer *singleTapRecogniser = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)] autorelease]; 
[singleTapRecogniser setDelegate:self]; 
singleTapRecogniser.numberOfTouchesRequired = 1; 
singleTapRecogniser.numberOfTapsRequired = 1; 
[yourHeaderView addGestureRecognizer:singleTapRecogniser]; 

và sau đó:

- (void) handleGesture:(UIGestureRecognizer *)gestureRecognizer; 

Bạn có thể sử dụng gesture.view để xem đã xúc động. Sau đó làm bất cứ điều gì bạn cần phải làm gì để tìm ra các tiêu đề đó là (thẻ, dữ liệu mảng tra cứu ...)

+0

Tôi nghĩ rằng bạn phải thay đổi phương pháp để: '- (void) gestureHandler: (UIGestureRecognizer *) gestureRecognizer;' bởi vì bạn xác định hành động như 'gestureHandler' – fsulser

+0

sử dụng YourView * tappedView = (YourView *) gestureRecognizer.view; để xem chế độ xem nào được xúc động rõ ràng hơn –

4

Đây là những gì làm việc cho tôi trong Swift 2:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 

    let v = UITableViewHeaderFooterView() 
    v.textLabel?.text = "Header Text" 
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 
    tapRecognizer.delegate = self 
    tapRecognizer.numberOfTapsRequired = 1 
    tapRecognizer.numberOfTouchesRequired = 1 
    v.addGestureRecognizer(tapRecognizer) 
    return v 
} 

func handleTap(gestureRecognizer: UIGestureRecognizer) 
{ 
    print("Tapped") 
} 
Các vấn đề liên quan