0

我将 JASidePanels 用于我的应用程序(Facebook 菜单样式)。

LeftPanel 是我的菜单(tableView),而我显示内容的 CenterPanel 有一个 collectionView。

当我在中心 collectionView 中点击一个项目时,我还想选择与我的 LeftPanel 中被点击的项目相同的 indexPath,即菜单。

我试过这样做,但没有奏效。

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    // Other codes ...

    LeftMenuViewController *leftMC = [[LeftMenuViewController alloc] init];
    [leftMC.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:0];
}

我应该做什么?

谢谢您的帮助!

4

1 回答 1

0

左侧菜单控制器应该已经存在并且很可能是可见的。因此,创建一个确实不可行(您将在每个选择事件中创建它 - 没有意义)。

我假设左侧菜单和集合视图控制器之间的关系是主细节(通过导航或其他控制器)。两个控制器相互“交谈”的通常设计模式是@protocol

//CollectionViewController.h
@protocol LeftMenuProtocol;

@interface ...
@property (nonatomic, assign) id<LeftMenuProtocol> delegate; 
...
@end 

@protocol LeftMenuProtocol <NSObject>
-(void)collectionView:(UICollectionView*)collectionView 
   didSelectItemAtIndexPath:(NSIndexPath*)indexPath;
@end

创建集合视图控制器时,将左侧菜单设置为其委托。发生选择时,使用self选定的索引路径调用委托方法。

然后菜单可以做出适当的反应,例如通过滚动到正确的行

[self.tableView scrollToRowAtIndexPath:indexPath
  atScrollPosition:UITableViewScrollPositionMiddle 
  animated:YES];

有关协议的一些一般帮助,请参阅Cocoa Core Competencies

于 2013-08-30T08:02:53.450 回答