2011-10-13 16 views

Odpowiedz

24

Nie można tego zrobić za pomocą UITableViewDelegate.

Co można zrobić, to dodać przycisk wielkości widoku nagłówka sekcji i dodać go do widoku. Ustaw znacznik przycisku na indeks sekcji. Następnie wystarczy dodać UIViewController jako cel dla UIControlEventTouchUpInside.

Następnie, patrząc na znacznik przycisku, można zobaczyć, która sekcja jest kliknięta.

+0

Albo można po prostu zwróci UIButton wielkości nagłówka w metodzie "viewForHeaderInSection", zamiast dodawać widok i zwracać go –

60

To nie jest radykalnie odmienne niż odpowiedź @rckoenes, ale zapewnia bardziej ortodoksyjny sposób obsługi zdarzeń na widokach zamiast używania niewidocznych przycisków.

wolałbym dodać UITapGestureRecognizer do mojego widoku nagłówka zamiast dodawania niewidzialnych przycisków i ich rozmiaru:

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

, a następnie:

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

Można użyć gesture.view aby zobaczyć, które został wzruszony. Wtedy robić, co trzeba zrobić, aby dowiedzieć się, które było header (tagi, dane tablica lookup ...)

+0

Myślę, że musisz zmienić metodę na: '- (void) gestureHandler: (UIGestureRecognizer *) gestureRecognizer;' ponieważ definiujesz akcję jako 'gestureHandler' – fsulser

+0

użyj YourView * tappedView = (YourView *) gestureRecognizer.view; aby zobaczyć, który widok został dotknięty, co jest bardziej wyraźne –

4

Oto co pracował dla mnie w 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") 
} 
Powiązane problemy