2011-10-13 136 views
22

我有一個UITableView多節。每個部分都有一個部分標題(自定義視圖)是否有一種簡單的方法來檢測某人何時選擇部分標題? (就像didSelectRowAtIndexPath,但爲標題?)uitableviewcontroller部分選擇標題

在此先感謝。

回答

24

不,沒有辦法與UITableViewDelegate做到這一點。

你可以做的是添加一個按鈕的節頭視圖的大小,並將其添加到視圖。將按鈕的標籤設置爲節索引。 然後只需添加UIViewController作爲UIControlEventTouchUpInside的目標。

然後通過查看按鈕的標籤可以看到哪個部分被點擊。

+0

或者你可以返回「viewForHeaderInSection」方法中的頭部大小的UIButton,而不是添加一個視圖並返回它 –

60

這與@rckoenes答案並不完全不同,但它提供了一種更正統的方式來處理視圖上的事件,而不是使用隱形按鈕。

我寧願加UITapGestureRecognizer我的頭視圖,而不是添加隱形按鈕和調整他們的:

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

然後:

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

您可以使用gesture.view,看看哪些被感動了。然後做你需要做找出哪些頭是(標籤,數據陣列查找...)

+0

我認爲你必須改變方法: ' - (void)gestureHandler:(UIGestureRecognizer *)gestureRecognizer;'因爲你定義的動作爲'gestureHandler' – fsulser

+0

使用YourView * tappedView =(YourView *)gestureRecognizer.view;看看哪個視圖更加明確 –

4

下面是我在斯威夫特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") 
}