2010-02-09 6 views
14

이와 비슷한 질문이 있지만 답변이 매우 일반적이며 모호합니다. (Detecting UITableView scrolling) 해고하지 마십시오. 나는 구체적인 해결책을 찾고있다.UITableView의 스크롤을 감지하는 방법?

편집 가능한 텍스트 필드가있는 UITableView이 있는데 다른 셀을 선택하면 PickerView가 나타납니다. 사용자가이 UITableView을 스크롤하기 시작할 때 firstResponder 또는 PickerView를 숨기는 것이 필요합니다.

지금까지 질문 Detecting UITableView scrolling에서 UITableView의 하위 클래스를 사용해야한다고 생각했습니다. 만약 당신이 UITableView 여전히 내부/개인 UIScrollView subsclass 액세스 할 수 없습니다. UITableView의 부모 ScrollView에 액세스하려면 어떻게해야합니까 (법률을 위반하지 않고)?

감사합니다.

답변

34

스크롤을 추적하려면 UITableView을 서브 클래스 할 필요가 없습니다. UITableViewDelegateUIScrollViewDelegate의 역할을 할 수도 있습니다. 그러므로 대표 클래스에서 상황에 따라 -scrollViewWillBeginDragging: 또는 UIScrollViewDelegate 메서드를 구현할 수 있습니다. 하는 .m 파일에서

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

:

.H 파일에서 :

+1

감사합니다. 강행 tneed이 @ 인터페이스의 MyTableViewController에 를 추가하려면 다음의 UIViewController를 다음 -scrollViewWillBeginDragging 구현 : 감사합니다. – Rod

+0

어떻게하면 특정 테이블에서 스크롤 할 수 있습니까? 예를 들어 2 개의 UITableView가 있다고 가정 해 보겠습니다. –

+1

@jeraldo, 모든 UIScrollViewDelegate 메서드는 매개 변수로 호출하는 스크롤 뷰를 허용하므로 어떤 UIScrollView를 사용하고 있는지 쉽게 확인할 수 있습니다 – Vladimir

8

블라디미르의 대답에 확장하려면, 이것은 내가이 솔루션을 구현하는 방법이다 (실제로는 질문에 제안 당신이 언급)

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView { 
    //logic here 
} 
1

나는 똑같은 문제가 있었고 위의 답을 수정하여 아이디어를 얻었지만 테이블 뷰가 스크롤되는 동안 새로 고침을 원하면 앱이 다운되는 일이 없을뿐만 아니라 cr 새로 고침하는 동안 스크롤하면 유골이 나옵니다. 따라서 모든 상황에서 문제를 해결할 수있는 확장 된 솔루션은 다음과 같습니다.


1.1. 사용자가 새로 고침 버튼을 누른 경우 스크롤을 사용 중지합니다.

1.2. 새로 고침 프로세스가 완료되면 스크롤을 활성화하십시오.


2.1. 사용자가 스크롤 할 때 새로 고침 버튼을 비활성화하십시오.

2.2. 사용자가 첫 번째 부분은 구현하기


스크롤 완료되면 리프레시 활성화 버튼 (. 1.1 및 1.2.)

-(void)startReloading:(id)sender 
{ 
    ... 
    self.tableView.userInteractionEnabled = NO; 
    // and the rest of the method implementation 
} 

-(void)stopReloading:(id)sender 
{ 
    self.tableView.userInteractionEnabled = YES; 
    // and the rest of the method implementation 
} 

번째 부분을 구현하기 위해 (2.1, 2.2..) :

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView 
{ 
    barButton.enabled = NO; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    barButton.enabled = YES; 
} 

그리고 그것은 이전의 대답에 설명 된 것 같은, UISCrollViewDelegate.h 파일에 설정해야합니다 :

@interface MyTableViewController : UITableViewController <UIScrollViewDelegate> 

P.S.userInteractionEnabled 대신 scrollEnabled을 사용할 수 있지만 모두 해당 작업에 따라 다르지만 userInteraction이 기본 옵션입니다.

6
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    if (scrollView == myTableView){ 
     // Your code here..... 
    } 
} 
관련 문제