Ich stimme völlig mit JAL überein, Sie müssen alle Ihre Zellstruktur überprüfen, aber ich weiß auch, dass manchmal und in einigen Fällen ist es unmöglich Refaktor zu tun.
Also, ich denke, das ist, dass Sie ein CustomTableViewCell
von zwei Ansichten zusammengesetzt haben, mit dem Namen zum Beispiel view1 und view2:
Der Code:
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)
}
}
Auf der anderen Seite, wo Sie zum Beispiel haben eine UIViewController
mit einem 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
}
}
}
Einige wichtige Dinge:
Vergessen Sie nicht die richtige Kundenspezifische Klasse für die beiden Ansichten zu setzen wie in diesem Bild erklärt:

Ein Link zum Herunterladen des Projekts: http://s000.tinyupload.com/?file_id=00948862908688472208 –