【问题标题】:How to select UITableViewController row from ANOTHER ViewController?如何从另一个 ViewController 中选择 UITableViewController 行?
【发布时间】:2013-08-30 07:51:42
【问题描述】:

我正在为我的应用程序使用 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];
}

我该怎么办?

感谢您的帮助!

【问题讨论】:

    标签: ios uitableview uicollectionview didselectrowatindexpath


    【解决方案1】:

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

    我假设左侧菜单和集合视图控制器之间的关系是主从关系(通过导航或其他控制器)。两个控制器相互“交谈”的常用设计模式是@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

    【讨论】:

    • 从您的回答中,我了解到我正在为我的 CenterPanel 中的每个选择事件创建一个新的 LeftMenuViewController,这确实没有意义。抱歉,我对 iOS 开发很陌生,所以我不太了解您的代码。你能再解释一下吗?我不知道我应该从上面的代码中写什么。谢谢!
    • 错了!我说过在每个选择事件中创建一个是可行的。这就是你正在做的事情。 -- 协议是 iOS 的一个非常基本的设计模式。查看Cocoa Core Competencies: Protocol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多