经过几天的疯狂,我无法找到解决问题的方法。问题是:在UICollectionView
中选择单元格后,方法didSelectItemAtIndexPath
未被调用。
我的观点结构是:
此视图由具有以下方法的控制器管理:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
}
override func viewDidLoad() {
super.viewDidLoad()
initCategoriesCollection()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func initCategoriesCollection(){
let ccVC : CategoriesCollectionViewController = UIStoryboard(name:"CandidateProfile",bundle:nil).instantiateViewControllerWithIdentifier("categoriesController") as! CategoriesCollectionViewController;
addChildViewController(ccVC)
ccVC.view.frame = CGRectMake(0, 0, self.containerView.frame.size.width, self.containerView.frame.size.height);
containerView.addSubview(ccVC.view)
ccVC.didMoveToParentViewController(self)
}
上面的容器视图具有以下结构:
此容器视图由实现这些方法的ViewController管理:
// tell the collection view how many cells to make
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.e1Categories.count
}
// make a cell for each cell index path
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CategoryCollectionViewCell
// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.categoryName.text = self.e1Categories[indexPath.item].string
cell.categoryName.numberOfLines = 0
cell.categoryName.sizeToFit()
cell.categoryName.textAlignment = .Center
cell.categoryCircle.makeCircle()
return cell
}
// MARK: - UICollectionViewDelegate protocol
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
// handle tap events
print("You selected cell #\(indexPath.item)!")
}
有谁知道发生了什么?我试图删除ScrollView,因为它可能是拦截触摸事件,但它仍然无法正常工作。 在阅读了其他一些问题之后,在Stackoverflow中,没有一个问题可以解决。
提前致谢。
编辑:
我已将delegate
和dataSource
与故事板相关联,如下图所示:
答案 0 :(得分:1)
在@if (MethodCallThatReturnsBool())
{
System.Web.HttpContext.Current.Response.Write(System.Web.Optimization.Styles.Render("~/css/bundle"));
}
,您正在创建新的initCategoriesCollection()
:
CategoriesCollectionViewController
据你说:
此容器视图由实现这些方法的ViewController管理:
然后,您将let ccVC : CategoriesCollectionViewController = UIStoryboard(name:"CandidateProfile",bundle:nil).instantiateViewControllerWithIdentifier("categoriesController") as! CategoriesCollectionViewController;
添加到实施ccVC
功能controller
的其他delegate
。因此,故事板上设置的didSelectItemAtIndexPath
不是正确管理它的delegate
。
您应该更新controller
,因为您要将其添加到正在实施它的另一个delegate
。尝试更新到此
controller
答案 1 :(得分:0)
首先,谢谢你给我一些解决问题的提示。跟随它们并尝试将父控制器指定为delegate
的{{1}},它表示子ViewController中没有ccvc.collectionView
。
我的问题是,我认为如果通过delegate
分配delegate
和dataSource
它会有效,但不会。
所以我决定在父控制器中实现Delegate和Datasource协议,删除子控制器,它现在就像魅力一样。
当我使用Storyboard
时,也许我误解了概念。谢谢你的帮助!
答案 2 :(得分:0)
collectionView.delegate = self
collectionView.dataSource = self
设置委托和数据源UIViewController类,而不是在故事板中