访问customCell中的navigationController

时间:2016-08-23 16:02:17

标签: ios swift uicollectionview

我有collectionView和customCells,在第一个(indexPath 0)我有一个Button

我希望当我点击它时,我会进入另一个ViewController但我无法访问navigationController,因为我的单元格是UICollectionViewCell

如何获取对navigationController的访问权限?

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式为该单元格的Button方法ViewController内的当前CollectionViewDataSource实际设置cellForItemAtIndexPath操作。

cell.btnAdd.addTarget(self, action: #selector(self.buttonClicked(_:)), forControlEvents: .TouchUpInside)

之后在ViewController

中添加此方法
func buttonClicked(sender: UIButton) {
    //perform navigation now
}

答案 1 :(得分:0)

为单元格

创建委托协议和属性

一个很好的选择是为UICollectionViewCell子类创建委托协议和委托属性。

该协议清楚地说明了小区如何将其需求传达给感兴趣的一方(而不是将一个按钮的目标/动作设置在该类的外部某处)并创建一个区域来扩展该通信。将来

此外,如果您需要添加与单元代理的更多通信,您所要做的就是添加一个新的必需或可选方法,而不必连接任何其他方法,这样做的额外好处是单元类的用户可以查看协议的声明,并立即知道单元如何与另一个对象通信,而不必知道一堆私有实现细节,例如按钮的存在等。连接按钮可能是目前最短的路径,但最终不是很好的编码实践,也不遵循分离关注的概念。

对于特定的单元格类型,委托属性可能非常简单,例如(Objective-C):

@protocol AddRecipeCollectionViewCellDelegate <NSObject>

@required
- (void)cellDidRequestAddRecipeAction:(AddRecipeCollectionViewCell *)cell;

@end

@interface AddRecipeCollectionViewCell : UICollectionViewCell

@property (weak, nonatomic) id<AddRecipeCollectionViewCellDelegate> delegate;

@end

(注意:这里需要Swift代码,我将使用Swift等效更新答案,但我需要研究语法,因为我不会每天都使用它,其他人都可以随意使用如果你先得到它,可以提供相当于这个答案的Swift)