In meiner Hauptseite habe ich eine XIB-Datei für UITableViewCell erstellt. Ich lade die Zelle aus dieser XIB-Datei und es funktioniert gut.Wie fügt man eine Schaltfläche mit Klickereignis auf UITableViewCell in Swift hinzu?
Innerhalb der Zelle habe ich einige Etiketten und Knöpfe. Ich möchte die Beschriftung ändern, indem ich auf den Knopf in der Zelle klicke.
My-Code mag unter
import UIKit
class SepetCell: UITableViewCell{
@IBOutlet var barcode: UILabel!
@IBOutlet var name: UILabel!
@IBOutlet var fav: UIButton!
@IBOutlet var strep: UIStepper!
@IBOutlet var times: UILabel!
@IBAction func favoriteClicked(sender: UIButton) {
println(sender.tag)
println(times.text)
SepetViewController().favorite(sender.tag)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Dies ist meine xib Dateien hinter Codes als .swift.
Die Codes in der Haupt-Seite gerne unter:
import UIKit
import CoreData
class SepetViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate {
@
IBOutlet
var sepetTable: UITableView!
var barcodes: [CART] = []
let managedObjectContext = (UIApplication.sharedApplication().delegate as!AppDelegate).managedObjectContext
override func viewWillAppear(animated: Bool) {
if let moc = self.managedObjectContext {
var nib = UINib(nibName: "SepetTableCell", bundle: nil)
self.sepetTable.registerNib(nib, forCellReuseIdentifier: "productCell")
}
fetchLog()
sepetTable.reloadData()
}
func fetchLog() {
if let moc = self.managedObjectContext {
barcodes = CART.getElements(moc);
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) - > Int {
return self.barcodes.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - > UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("productCell") as ? SepetCell
if cell == nil {
println("cell nil")
}
let product: CART
product = barcodes[indexPath.row]
cell!.barcode ? .text = product.barcode
cell!.name ? .text = product.name
cell!.fav.tag = indexPath.row
return cell!
}
func favorite(tag: Int) {
}
}
Wenn i FAV-Taste innerhalb der Zelle angeklickt. Ich wollte mal Text zB auf irgendwas ändern.
Wenn ich auf die Schaltfläche "fav" geklickt habe, wird das Ereignis an die Funktion functionClicked (sender: UIButton) von SepetCell.swift übergeben.
Also, wenn ich versuche zu nennen:. SepetViewController() Favorit (sender.tag)
Es geht im Inneren des
func favorite(tag: Int) {
sepetTable.reloadData()
}
aber sepetTable ist gleich Null, wenn es dort weg ist. Ich denke es liegt daran, wenn ich diese SepetViewController(). Favorite (sender.tag) Funktion aufruft. Es erstellt zuerst die SepetViewController-Klasse. Weil das Objekt nicht gesetzt ist, wird es null.
Wie erreiche ich diese SepetTable oder was ist der beste Weg, um dieses Problem zu lösen.
Danke.
vielen Dank. es hat für mich funktioniert. Wenn ich etwas von SepetCell zu tableView schicken möchte, was soll ich tun? Zum Beispiel habe ich einen strepper und wenn ich darauf klicke, möchte ich den Wert des Labels ändern –
ok Ich habe es durch einige Versuche gefunden :) Ich habe einige Änderungen am Code wie gemacht: var onFavButtonTapped: ((Int) - > Leere)? = Nil **** wenn lassen onButtonTapped = self.onButtonTapped { onButtonTapped (3) } **** Zelle .onButtonTapped = {(x: Int) in println (x) } –
groß hören!. BTW, wenn Sie meine Antwort nützlich fanden, bitte erwägen Upvoting :) – raf