Iphone 与其他UITableview同时滚动其他UITableview

Iphone 与其他UITableview同时滚动其他UITableview,iphone,ios,objective-c,uitableview,uiscrollview,Iphone,Ios,Objective C,Uitableview,Uiscrollview,我有一个相当复杂的观点。我的基本情况如下 你可以看到我有一个垂直的桌面视图。在每个单元格中,我都有一个水平的表视图。我现在要做的是,当我滚动一个水平tableview时,其他每个水平tableview也应该滚动 在垂直tableviewCell的子类中,我有以下内容 for(HorizontalTableCell *cell in mainTable.subviews){ if([cell isKindOfClass:[HorizontalTableCell class]])

我有一个相当复杂的观点。我的基本情况如下

你可以看到我有一个垂直的桌面视图。在每个单元格中,我都有一个水平的表视图。我现在要做的是,当我滚动一个水平tableview时,其他每个水平tableview也应该滚动

在垂直tableviewCell的子类中,我有以下内容

  for(HorizontalTableCell *cell in mainTable.subviews){
        if([cell isKindOfClass:[HorizontalTableCell class]]){
            for(UITableView *cellTable in cell.subviews){
                if([cellTable isKindOfClass:[UITableView class]]){
                    NSLog(@"cell table is table %@",cellTable);
                    [cellTable setContentOffset:CGPointMake(scrollView.contentOffset.x, 0) animated:NO];
                }
            }
        }
    }

但是这样不行。有人能帮我吗?

您需要使用滚动视图委托方法。我建议发布一个通知,然后像这样把它放在牢房里

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"CellScrolledHorizontally" object:self.tableView];
}
然后在水平单元格中,您可以观察通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(scrolled:) name:@"CellScrolledHorizontally" object:nil];

- (void)scrolled:(NSNotification *)notification 
{ 
    UITableView *notificationTableView = notification.object; 

    if (notificationTableView == self.tableView) 
        return; 

    [self.tableView setContentOffset:notificationTableView.contentOffset]; 
}

或者,使用UICollectionView。

您需要使用滚动视图委托方法。我建议发布一个通知,然后像这样把它放在牢房里

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"CellScrolledHorizontally" object:self.tableView];
}
然后在水平单元格中,您可以观察通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(scrolled:) name:@"CellScrolledHorizontally" object:nil];

- (void)scrolled:(NSNotification *)notification 
{ 
    UITableView *notificationTableView = notification.object; 

    if (notificationTableView == self.tableView) 
        return; 

    [self.tableView setContentOffset:notificationTableView.contentOffset]; 
}
或者,使用UICollectionView。

可以尝试以下逻辑:

使用UIScrollView代替水平表视图。现在,基础是一个UITableView,水平滚动视图在此基础上显示。现在使用UIScrollview委托方法进行事件处理

虽然这不是解决方案,但您可以查看

是否可以尝试以下逻辑:

使用UIScrollView代替水平表视图。现在,基础是一个UITableView,水平滚动视图在此基础上显示。现在使用UIScrollview委托方法进行事件处理


虽然这不是解决方案,但您可以查看

我应该在哪个类中设置scollViewDidScroll?在HorizontalTableviewCell类中?所有这些都应该放在包含水平TableView的单元格中。当表格水平滚动时,您会发布一个通知,让其他单元格知道发生了这种情况。然后其他水平单元格会将它们自己的tableview更新为相同的滚动偏移量。好的,但我得到了这个错误:没有已知的selector postnotificationwithname:objectI的实例方法可能拼写错误。当你开始打字时,它会自动完成。啊,是的,我选中了,它是postNotificationName:object:然后我在滚动的:NSNotification*->[self.horizontalTableView setContentOffset:CGPointMake[notification.object floatValue],0动画:否]中执行此操作;我应该在哪个类中设置scollViewDidScroll?在HorizontalTableviewCell类中?所有这些都应该放在包含水平TableView的单元格中。当表格水平滚动时,您会发布一个通知,让其他单元格知道发生了这种情况。然后其他水平单元格会将它们自己的tableview更新为相同的滚动偏移量。好的,但我得到了这个错误:没有已知的selector postnotificationwithname:objectI的实例方法可能拼写错误。当你开始打字时,它会自动完成。啊,是的,我选中了,它是postNotificationName:object:然后我在滚动的:NSNotification*->[self.horizontalTableView setContentOffset:CGPointMake[notification.object floatValue],0动画:否]中执行此操作;