2011-10-13 3 views
22

여러 섹션이있는 UITableView가 있습니다. 각 섹션에는 섹션 헤더 (사용자 정의보기)가있어 섹션 헤더를 선택하면 쉽게 찾을 수 있습니다. (didSelectRowAtIndexPath와 마찬가지로 헤더에 대해?)uitableviewcontroller 섹션의 헤더 선택

미리 감사드립니다.

답변

24

아니요 UITableViewDelegate으로 수행 할 방법이 없습니다.

섹션 헤더보기의 크기만큼 단추를 추가하고보기에 추가하면됩니다. 버튼의 태그를 섹션 색인으로 설정하십시오. UIControlEventTouchUpInside의 대상으로 UIViewController을 추가하기 만하면됩니다.

버튼의 태그를 보면 클릭 한 부분을 볼 수 있습니다.

+0

또는 당신은 단지를 반환 할 수 있습니다 "viewForHeaderInSection"메서드에서 헤더 크기의 UIButton,보기를 추가하고 그것을 반환하는 것 –

60

이것은 @rckoenes 응답과 근본적으로 다르지 않지만 보이지 않는 버튼을 사용하는 대신보기에서 이벤트를 처리하는보다 정통적인 방법을 제공합니다. 다음

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

과 :

차라리 눈에 보이지 않는 버튼을 추가하고 크기를 조정하는 대신 내 헤더보기에 UITapGestureRecognizer를 추가 할 것

- (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") 
} 
관련 문제