我有一个,父“ ListViewController”与mainTable和menuTable声明。
我还有两个实现“ ListViewController”的控制器“ MenuController”和“ MainController”。每个都有其自己的故事板,但是由于有了ECSlidingViewController(facebook菜单效果),我可以在一个屏幕上看到两者。 MenuController具有menuTable,MainController具有mainTable。我希望mainTable与menuTable一起滚动。
问题是在“ ListViewController”的(void)scrollViewDidScroll:(UIScrollView *)scrollView中,我只能设置当前滚动表的contentOffset。

ListViewController.h

@interface ListViewController : UIViewController {
IBOutlet UITableView *mainTable;
IBOutlet UITableView *menuTable;
}


ListViewController.m

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
self.mainTable.contentOffset = scrollView.contentOffset;;
// works only when I am scrolling mainTable,
// but I need it when I am scrolling menuTable

}


MenuController.m

@interface MenuController :  ListViewController <UITableViewDelegate, UITableViewDataSource>
{
...
}


主控制器

@interface MainController :  ListViewController <UITableViewDelegate, UITableViewDataSource>
{
...
}

最佳答案

如我所见,ListViewController是一个表的委托,因此scrollViewDidScroll:仅为此UITableView调用。您应该跟踪第二个表在其委托中的滚动,可以在表与其实际委托之间创建代理委托...

@interface ProxyTableViewDelegate <UITableViewDelegate>

@property (nonatomic, strong) id<UITableViewDelegate> realDelegate;
- (instancetype)initWithRealDelegate:(id<UITableViewDelegate>)realDelegate;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

@end

@implementation ProxyTableViewDelegate

- (instancetype)initWithRealDelegate:(id<UITableViewDelegate>)realDelegate
{
    if (self = [super init]) {
        self.realDelegate = realDelegate;
    }
    return self;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Custom actions ...

    if ([self.realDelegate respondsToSelector:@selector(scrollViewDidScroll:)])
        [self.realDelegate scrollViewDidScroll:scrollView];
}

- (void)forwardInvocation:(NSInvocation *)invocation
{
    [invocation invokeWithTarget:self.realDelegate];
}

@end


用法:

// tableView.delegate != nil
tableView.delegate = [[ProxyTableViewDelegate alloc] initWithRealDelegate:tableView.delegate];

关于ios - 同时滚动两个UITableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15887011/

10-13 04:19