2014-01-16 1 views
0

나는 UIViewController - WSProfileViewController입니다. 이 VC에는 headerView이 있고 containerViewchildViewControllerWSProfileViewController 인 세 개의 tableViewController 중 하나를로드합니다. 현재 tableView이 스크롤 될 때마다 headerView을 스크롤 할 수 있기를 원합니다. 마치 tableView 인 것처럼 headerView 인 것처럼 스크롤 할 수 있습니다.하위보기 컨트롤러의 캡처 스크롤

주 VC에서 WSProfileViewControllerUIScrollViewDelegate으로 구현되었고 scrollViewDidScroll으로 구현되었지만 결코 호출되지 않습니다. 현재 tableViews 어린이의 scrollViews은 연결되어 있지 않습니다.

* 각 자식 tableViewController은 다른 데이터 모델을 사용하며 다른 곳에서 사용되는 클래스이므로 그대로 유지하고 어린이로로드하려고합니다.

답변

1

그래서 child view controllers의 코드 중 하나를 변경하고 싶지 않았다 그러나 나는 확신 나는 그것에게 child tableviewsdelegate하지 않는 한 부모가 직접 아이 스크롤을 캡처 할 수있는 방법이 아니지만, 나는 각각 child view controller이 그들 자신의 tableview의 delegate 일 필요가 있기 때문에 그렇게 할 수 없다.

누락 된 부분을 수정하십시오. 다음

#pragma mark - UIScrollView Delegate 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    NSDictionary *scrollViewInfo = [NSDictionary dictionaryWithObject:scrollView forKey:@"someKey"]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"someNotificationName" object:nil userInfo:scrollViewInfo]; 

} 

그리고를 단순히 부모에 그 사항을 준수하십시오 :

#pragma mark - Notifications 
- (void)registerForNotifications { 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(childScrollViewDidScroll:) name:@"someNotificationName" object:nil]; 
} 

- (void)childScrollViewDidScroll:(NSNotification *)note { 

    UIScrollView* scrollView = [[note userInfo] valueForKey:@"someKey"]; 

    CGFloat scrollOffset = scrollView.contentOffset.y;  

    CGRect headerFrame = self.headerView.frame; 

    headerFrame.origin.y = -scrollOffset; 

    self.headerView.frame = headerFrame; 

} 

그것은 장치의 헤더보기는 스크롤

은 내가 한 일은과 같이 각 아동의 scrollViewDidScroll 방법에서 알림을 보내였다 지체없이, 적어도 순간적으로 나는 만족한다.

+0

나는 이것이 미세하게 잘 수행되지 않을 것이라고 생각합니다. 사용자가 빠르게 스크롤 할 때와 마찬가지로 스크롤처럼 부드럽게 알림을받을 수 있습니다. –

0

KVO를 사용하여 하위 scrollView의 contentOffset에 대한 변경 사항을 모니터링 할 수 있습니다. KVO에 대해 자세히 알아 보려면이 기사를 확인하십시오. http://nshipster.com/key-value-observing/

관련 문제