2012-03-21 2 views
0

한 화면에 두 개의 테이블을 만들고 싶기 때문에 테이블 A를 아래로 스크롤하면 테이블 B가 동시에 위로 스크롤됩니다. 누군가 코드를 작성하거나 그렇게 할 수있는 쉬운 방법을 제공 할 수 있습니까?한 화면에 두 개의 UITableView가 있습니다.

+0

정확히 무엇을 원하는 설명 할 수 있습니다, 그래서 우리는 당신에게 적절한 해결책을 줄 수 있습니다. – Rupesh

답변

2

우바 오 언급했듯이 UIScrollViewDelegate을 사용해야합니다. 그러나 당신은 현재 어떤 scrollView가 드래그/활성화되어 있는지 확인해야합니다. else를 사용하면 스크롤 뷰에서 위임 콜백을 가져오고 동시에 서로에게 변경 사항을 적용하여 끝없이 반복되는 순환/끝없는 스크롤이 발생하는 문제가 발생합니다. - (void)scrollViewDidScroll:(UIScrollView *)scrollView

하지만 당신은 이전의 오프셋을 기억해야한다, 그래서 당신은 값의 변화를 알고 : 상세

, 당신은 확인해야합니다. . (또는 귀하의 의견은 같은 높이가 그럼 그냥 다른보기를 오프셋으로 contentSize.height-offset을 사용할 수 있습니다

내가) (검증되지 않은 조금 적어하려고합니다 :.

@interface ViewController() <UITableViewDelegate,UIScrollViewDelegate> 

// instances of your tableviews 
@property (nonatomic, strong) UITableView *tableLeft; 
@property (nonatomic, strong) UITableView *tableRight; 

// track active table 
@property (nonatomic, strong) UIScrollView* activeScrollView; 

// helpers for contentoffset tracking 
@property (nonatomic, assign) CGFloat lastOffsetLeft; 
@property (nonatomic, assign) CGFloat lastOffsetRight; 

@end 


@implementation ViewController 

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.tableLeft.delegate = self; 
    self.tableRight.delegate = self; 
} 

– (void) scrollViewWillBeginDragging: (UIScrollView*) scrollView 
{ 
    self.activeScrollView = scrollView; 
    self.tableViewRight.userInterActionEnabled = (self.tableViewRight == scrollView); 
    self.tableViewLeft.userInterActionEnabled = (self.tableViewLeft == scrollView); 
} 

- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if(!decelerate) { 
    self.activeScrollView = nil; 
    self.tableViewRight.userInterActionEnabled = YES; 
    self.tableViewLeft.userInterActionEnabled = YES; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    self.activeScrollView = nil; 
    self.tableViewRight.userInterActionEnabled = YES; 
    self.tableViewLeft.userInterActionEnabled = YES; 
} 

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if(self.activeScrollView == self.tableViewLeft) 
    { 
    CGFloat changeLeft = self.tableViewLeft.contentOffset.y - self.lastOffsetLeft; 
    self.tableViewRight.contentOffset.y += changeLeft; 
    } 
    else if (self.activeScrollView == self.tableViewRight) 
    { 
    CGFloat changeRight = self.tableViewRight.contentOffset.y - self.lastOffsetRight; 
    self.tableViewLeft.contentOffset.y += changeRight; 
    } 

    self.lastOffsetLeft = self.tableViewLeft.contentOffset.y; 
    self.lastOffsetRight = self.tableViewRight.contentOffset.y; 
} 

@end 

을 기본적으로 그것은 또한 활성 스크롤보기를 잠급니다. 두 스크롤 때문에 추한 동작이 발생합니다. 또한 contentOffset.y += changeLeft; 아마도 작동하지 않습니다. 새 CGPoint/CGSize를 만들어야합니다.

+0

pls 약간의 코드를 제공 할 수 있습니다. ab. – turtle

+0

편집 : 코드 예제 추가 (테스트 안 함) – calimarkus

+0

감사합니다 jaydee ... 나는 그것을 자체적으로 구현하려고합니다 ... 성공적으로 실행할 수 있는지 알려 드리겠습니다. – turtle

3

UITableViewUIScrollView에서 파생되므로 하나의 테이블보기의 viewDidScroll 대리자 메서드를 사용하여 다른 테이블보기 스크롤 위치를 제어 할 수 있습니다.

관련 문제