Я полностью согласен с JAL, вам нужно просмотреть всю структуру вашей ячейки, но я также знаю, что иногда и в некоторых случаях невозможно делать рефакторинг.
Так что, я думаю, что это, предположим, что у вас есть CustomTableViewCell
составленное двумя видами, названный, например view1 и view2:
Код:
class MyView1 : UIView {
var isTouched : Bool = false
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.isTouched = true
self.nextResponder()?.touchesBegan(touches, withEvent: event)
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.isTouched = false
self.nextResponder()?.touchesEnded(touches, withEvent: event)
}
}
class MyView2 : UIView {
var isTouched : Bool = false
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.isTouched = true
self.nextResponder()?.touchesBegan(touches, withEvent: event)
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.isTouched = false
self.nextResponder()?.touchesEnded(touches, withEvent: event)
}
}
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var myExampleLabel: UILabel!
@IBOutlet weak var view1: MyView1!
@IBOutlet weak var view2: MyView2!
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("situation: myView1 : \(self.view1.isTouched) myView2: \(self.view2.isTouched)")
var responder : UIResponder! = self
while responder.nextResponder() != nil {
responder = responder.nextResponder()
if responder is SimpleTableView.ViewController { // the name of your tableView delegate class
let vc = responder as! ViewController
let indexPath = vc.tableView.indexPathForCell(self)
vc.tableView(vc.tableView, didSelectRowAtIndexPath: indexPath!)
}
}
super.touchesBegan(touches, withEvent: event)
}
}
К другой стороне, где вы есть, например, UIViewController
с UITableView
:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var tableView: UITableView!
var items: [String] = ["We", "Heart", "Swift", "So", "Much"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140.0
self.tableView.registerNib(UINib(nibName: "CustomTableViewCell", bundle:nil), forCellReuseIdentifier: "CustomTableViewCell")
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomTableViewCell", forIndexPath: indexPath) as! CustomTableViewCell
cell.myExampleLabel.text = self.items[indexPath.row]
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! CustomTableViewCell
print("row = %d",indexPath.row)
if cell.view1.isTouched {
print("tableView: touched view 1")
// do whatever you want with cell.view1
// if you want you can disable cell.view2.userInteractionEnabled
}
else {
print("tableView: touched view 2")
// same thing for cell.view2
}
}
}
Некоторые важные вещи:
Не забудьте установить правильный пользовательский класс для двух точек зрения, как описано в этой картине:
Ссылка для загрузки проекта: http://s000.tinyupload.com/?file_id=00948862908688472208 –