2015-05-23 4 views
2

у меня есть представление коллекции, которая содержит вид и изображение кнопки в каждой клетке, где я нажимаю на ImageView didSelectItemAtIndexPath вызывается, когда нажмите на кнопку он не вызываетdidSelectItemAtIndexPath в не вызвал быстрое

здесь есть код

 override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PhotoBrowserCellIdentifier, forIndexPath: indexPath) as! PhotoBrowserCollectionViewCell 
    let sharedImageCache = FICImageCache.sharedImageCache() 
    cell.imageView.image = nil 
    let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton 
    button.frame = CGRectMake(90, 90, 15, 15) 
    button.backgroundColor = UIColor.greenColor() 

    //cell.contentView.addSubview(button) 
    let photo = photos[indexPath.row] as PhotoInfo 
    if (cell.photoInfo != photo) { 

     sharedImageCache.cancelImageRetrievalForEntity(cell.photoInfo, withFormatName: formatName) 

     cell.photoInfo = photo 

     // cell.contentView.addSubview(button) 

    } 
    sharedImageCache.retrieveImageForEntity(photo, withFormatName: formatName, completionBlock: { 
     (photoInfo, _, image) -> Void in 
     if (photoInfo as! PhotoInfo) == cell.photoInfo { 
      // cell.imageView.image = image 
      var imgView = UIImageView(image:image!) 
      imgView.frame = CGRectMake(0,0,cell.frame.size.width, cell.frame.size.height); 
      cell.contentView.addSubview(imgView) 

      cell.contentView.addSubview(button) 
     } 
    }) 

    return cell 
} 


    override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let photoInfo = photosVideo[indexPath.row] 
    var url = photoInfo.sourceImageURL 
      button.addTarget(self, action: "showNotice", forControlEvents: UIControlEvents.TouchUpInside) 
    performSegueWithIdentifier("show photo", sender: ["photoInfo": photoInfo]) 
    println("hello") 
} 
+0

'button.addTarget (self, action:" showNotice ", forControlEvents: UIControlEvents.TouchUpInside)' Создаете ли вы функцию showNotice? 'FUNC showNotice (отправитель: UIButton) { Println ("BUTTON ЗДЕСЬ") } ' – Maybe1

+0

да я создал –

+1

Почему Вы добавляете цель в кнопке в didSelectItemAtIndexPath? Вам нужно создать действие, когда вы создаете кнопку в cellForItemAtIndexPath, и (я действительно не уверен здесь, поскольку я не уверен, что вы хотите сделать), но я считаю, что вам не нужен didSelectItemAtIndexPath, поскольку что-то должно произойти, когда вы касаетесь кнопка, а не вид – Icaro

ответ

3

didSelectItemAtIndexPath не будет вызывать при нажатии на кнопку, так что вы должны сделать это по-другому, как я уже упоминал ниже:

  1. , когда вы создаете кнопку в cellForItemAtIndexPath просто добавьте тег с ним таким образом, :

    button.tag = indexPath.row 
    
  2. После этого нужно добавить действие, которое вызывается при нажатии кнопки:

    button.addTarget(self, action: "buttonTapAction:", forControlEvents: UIControlEvents.TouchUpInside) 
    
  3. после этого при нажатии кнопки в ячейку, которую можно вызвать этот метод:

    func buttonTapAction(sender:UIButton!) 
    { 
        var button : UIButton = sender as! UIButton 
        var row : Int = button.tag 
    
        println(row) 
    } 
    

Так что, как вы можете получить значение indexPath.

Для получения дополнительной информации вы можете обратиться к примеру THIS, который использовал tableview, но это поможет вам лучше понять.

+0

thanx его рабочий ... –

+0

Привет, мы знаем, что другой способ исправить, но представление коллекции общего свойства знает cellForItemAtIndexPath? его не звоните, пожалуйста, дайте мне знать, почему, теперь я тоже сталкиваюсь с той же проблемой. – Vinayak

1

Попробуйте заменить это:

button.addTarget(self, action: "showNotice", forControlEvents: UIControlEvents.TouchUpInside) 

с этим:

button.addTarget(self, action: "showNotice:", forControlEvents: UIControlEvents.TouchUpInside) 
+0

Я попробовал это, это не работает –

+0

моя проблема это когда я нажимаю на кнопку, которая в ячейке нажимает на нее. Метод didSelectItemAtIndexPath не вызывает –

Смежные вопросы