如何从另一个 ViewController 中选择 UITableViewController 行?
Posted
技术标签:
【中文标题】如何从另一个 ViewController 中选择 UITableViewController 行?【英文标题】:How to select UITableViewController row from ANOTHER ViewController? 【发布时间】: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];
我该怎么办?
感谢您的帮助!
【问题讨论】:
【参考方案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。以上是关于如何从另一个 ViewController 中选择 UITableViewController 行?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中从另一个 ViewController 访问变量
从另一个 .swift 文件调用 ViewController 函数