2016-10-05 65 views
0

我在我的tableView中定製了tableViewCells。他們有兩個或更多的ImageViews在單元格內,可以被觸摸然後他們會彈跳並被選中。但是由於單元格正在被重用,我怎麼知道在哪個行中選擇了哪個ImageView?我知道我可以得到indexPath.row,但我怎麼知道2或3個圖像中的哪一個觸發了函數給我indexPath?希望你們明白我的意思。這是我的自定義tableViewCell,tableView代碼只是標準。如何知道哪個圖片在哪個tableview單元格被觸摸?

import UIKit 

class TwoPicsTableViewCell: UITableViewCell { 

@IBOutlet var containerView: UIView! 
@IBOutlet var votesButton: UIButton! 
@IBOutlet var commentsButton: UIButton! 
@IBOutlet var firstImage: bouncingRoundImageView! 
@IBOutlet var secondImage: bouncingRoundImageView! 
@IBOutlet var titleLabel: UILabel! 
@IBOutlet var descriptionLabel: UILabel! 
@IBOutlet var topUsernameLabel: UILabel! 
@IBOutlet var bottomUsernameLabel: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
    //self.layoutIfNeeded() 
    containerView.layer.cornerRadius = 10 
    containerView.clipsToBounds = true 
    self.backgroundColor = ColorScheme.primaryColor 
    votesButton.setTitleColor(ColorScheme.fourthColor, for: UIControlState()) 
    commentsButton.setTitleColor(ColorScheme.fourthColor, for: UIControlState()) 

    setupBackgroundGradient() 
    setupFirstImage() 
    setupSecondImage() 
} 

func setupBackgroundGradient() { 

    let bottomColor = ColorScheme.secondaryColor.cgColor 
    let topColor = ColorScheme.thirdColor.cgColor 

    let layer = CAGradientLayer() 
    layer.frame = containerView.frame 
    layer.frame.offsetBy(dx: -10,dy:-10) 
    layer.frame.size.width += 10 
    layer.frame.size.height += 10 
    layer.colors = [topColor, bottomColor] 

    containerView.layer.insertSublayer(layer, at: 0) 

} 

func setupFirstImage() { 

    let tappedOne = UITapGestureRecognizer(target: self, action: #selector(checkPicTwo)) 
    firstImage.addGestureRecognizer(tappedOne) 
} 

func setupSecondImage() { 

    let tappedTwo = UITapGestureRecognizer(target: self, action: #selector(checkPicOne)) 
    secondImage.addGestureRecognizer(tappedTwo) 
} 

func checkPicTwo() { 

    firstImage.bouncing() 
    vote(voteForPic: firstImage) 

    if secondImage.layer.borderWidth != 0 { 
     secondImage.layer.borderWidth = 0 
    } 
} 

func checkPicOne() { 

    secondImage.bouncing() 

    if firstImage.layer.borderWidth != 0 { 
     firstImage.layer.borderWidth = 0 
    } 
} 

override func prepareForReuse() { 
    super.prepareForReuse() 
    firstImage.image = nil 
    secondImage.image = nil 
    firstImage.layer.borderWidth = 0 
    secondImage.layer.borderWidth = 0 
} 

} 
+0

你已經對每個圖像視圖的輕敲姿勢,所以現在你知道哪個圖像被觸摸。問題是什麼? –

+0

是true,但輕擊手勢位於tableViewCell類內部。那麼如何從那裏獲取indexPath呢?我只知道我可以從UITableView類中的UITableView獲取indexPath,但是我需要在圖像上放置另一個手勢識別器,這似乎是錯誤的! –

+1

您需要委託在視圖控制器中觸發單元格被觸摸的事件。 ViewController引用了表視圖,並可以通過調用tableview.indexPathForCell函數給你indexPath –

回答

2
protocol TwoPicsTableViewCellDelegate{ 
    func image1Clicked(cell:TwoPicsTableViewCell) 
    func image2Clicked(cell:TwoPicsTableViewCell) 
} 

class TwoPicsTableViewCell: UITableViewCell { 

    var delegate:TwoPicsTableViewCellDelegate! 

    func checkPicTwo() { 

     firstImage.bouncing() 
     vote(voteForPic: firstImage) 

     if secondImage.layer.borderWidth != 0 { 
      secondImage.layer.borderWidth = 0 
     } 

     //delegate call 
     delegate.image1Clicked(self) 
    } 

    func checkPicOne() { 

     secondImage.bouncing() 

     if firstImage.layer.borderWidth != 0 { 
      firstImage.layer.borderWidth = 0 
     } 

     //delegate call 
     delegate.image2Clicked(self) 
    } 
} 

在視圖控制器符合它:

class myViewController: UIViewController, TwoPicsTableViewCellDelegate{ 


    //implement delegate methods 

    func image1Clicked(cell:TwoPicsTableViewCell){ 
     let indexPath = tableview.indexPathForCell(cell) 
     print(indexPath) 
    } 

    func image2Clicked(cell:TwoPicsTableViewCell){ 
     let indexPath = tableview.indexPathForCell(cell) 
     print(indexPath) 
    } 


    func table cellForRowAt..........{ 
     let cell = table.dequeCellAt.......... as? TwoPicsTableViewCell 
     //Assign delegate 
     cell.delegate = self 
     ....... 
     ....... 

     return cell 

    } 

} 
+0

非常感謝!我會盡快嘗試! –

+0

委託調用給我一個錯誤:「使用未解析的標識符'委託'」.. –

+0

已經在表格單元格類中定義了它,正如我在上面的答案中提到的那樣? 'var delegate:TwoPicsTableViewCellDelegate!' –

相關問題