如何从另一个ViewController中选择UITableViewController行?

时间:2013-08-30 07:51:43

标签: ios uitableview uicollectionview didselectrowatindexpath

我正在使用JASidePanels作为我的应用程序(Facebook菜单样式)。

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

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

我尝试过这样做,但它没有用。

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

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

我该怎么办?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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