2013-04-08 87 views
0

我有一個,具有mainTable和menuTable聲明的父級「ListViewController」。 我也有兩個控制器「MenuController」和「MainController」實現「ListViewController」。每個都有它自己的故事板,但是由於ECSlidingViewController(facebook菜單效果),我可以在一個屏幕上看到兩者。 MenuController有menuTable,MainController有mainTable。我想要mainTable和menuTable一起滾動。 問題是,在「ListViewController」(void)scrollViewDidScroll:(UIScrollView *)scrollView我可以只設置當前滾動的表的contentOffset。同時滾動兩個UITableViews

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> 
{ 
... 
} 

MainController.m

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

看起來像你只需要比較'scrollView'與'scrollViewDidScroll'中的'self.mainTable'或'self.menuTable'。 – k06a 2015-06-23 07:57:41

回答

1

當我看到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]; 
+0

我是一個新手,我無法處理這個問題:/你能否給我一些與我的例子有關的額外細節? – Dawid 2013-04-08 21:21:45

+0

我應該在哪裏放這段代碼,以及如何讓它一起工作?謝謝! – Dawid 2013-04-08 23:26:11

+0

這是一個非常有用的迴應!謝謝。 – Schroedinger 2015-06-23 07:33:02