2014-01-16 22 views
0

我有一個UIViewController - WSProfileViewController。該VC具有headerView,然後containerView將三個tableViewController中的一個加載爲WSProfileViewControllerchildViewController。我希望能夠在當前tableView向上滾動時向上滾動headerView,就好像它是tableView本身的headerView一樣。捕獲子視圖控制器的滾動

在主要的VC,WSProfileViewController,我做了一個UIScrollViewDelegate和實施scrollViewDidScroll,但它永遠不會被調用。它目前沒有連接子tableViewsscrollViews

*每個孩子tableViewController有不同的數據模型,並且是其他地方使用的類,所以我想保留它們並將它們作爲孩子加載。

回答

1

所以我不想改變child view controllers的任何代碼,但我敢肯定沒有任何方法讓父級直接捕獲子滾動,除非我將其設置爲child tableviewsdelegate,但我不能這樣做,因爲每個child view controller都需要成爲他們自己的tableview委託。

糾正我,如果我失去了一些東西。

我所做的就是從每個孩子的scrollViewDidScroll方法來發送通知,如下所示:

#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; 

} 

它的滾動設備上的標題視圖沒有滯後,所以至少目前我很滿意。

+0

我不認爲這會表現得那麼細膩。當用戶快速滾動時,不能期望通知被視爲像滾動一樣順暢。 –

相關問題