2015-05-07 22 views
6

Trong trang chính của tôi, tôi đã tạo một tệp xib cho UITableViewCell. Tôi đang tải các tế bào từ tập tin xib và làm việc tốt của nó.Làm thế nào để thêm một nút bấm với sự kiện click trên UITableViewCell trong Swift?

Bên trong ô, tôi có một số nhãn và nút. Tôi đang định thay đổi nhãn bằng cách nhấp vào nút trên ô.

Mã My thích bên dưới

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 
    } 
} 

Đây là các file xib của tôi đằng sau mã như .swift.

Các mã trong trang chính thích dưới đây:

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) { 



    } 
} 

Khi tôi nhấp vào nút fav bên trong tế bào. Tôi muốn thay đổi thời gian nhãn văn bản cho bất cứ điều gì ví dụ.

Khi tôi nhấp vào nút fav, sự kiện sẽ chuyển đến chức năng yêu thích của SepetCell.swiftClickClick (người gửi: UIButton).

Vì vậy, nếu tôi cố gắng để gọi:. SepetViewController() yêu thích (sender.tag)

Nó sẽ đi bên trong

func favorite(tag: Int) { 

     sepetTable.reloadData() 

    } 

nhưng sepetTable là con số không khi nó đã biến mất ở đó. Tôi nghĩ đó là vì khi tôi gọi hàm SepetViewController() này là yêu thích (sender.tag). Đầu tiên nó tạo ra lớp SepetViewController. Vì vậy, vì đối tượng không được giải quyết nó là nhận được null.

Làm cách nào để tôi có thể tiếp cận với sepetTable đó hoặc cách tốt nhất để giải quyết vấn đề này là gì.

Cảm ơn.

Trả lời

28

tôi sẽ xác định đóng cửa trong lớp tế bào:

class SepetCell: UITableViewCell{ 
    var onButtonTapped : (() -> Void)? = nil 

sau đó

@IBAction func favoriteClicked(sender: UIButton) { 
     println(sender.tag) 
     println(times.text) 
     if let onButtonTapped = self.onButtonTapped { 
      onButtonTapped() 
     } 
    } 

sau đó trong đoàn tableview của bạn:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - > UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("productCell") as ? SepetCell 
    cell.onButtonTapped = { 
     //Do whatever you want to do when the button is tapped here 
    } 

Hope this helps!

+0

cảm ơn rất nhiều. nó làm việc cho tôi. Nếu tôi muốn gửi đôi từ SepetCell đến tableView tôi nên làm gì? Ví dụ, tôi có một strepper và khi tôi nhấp vào nó tôi muốn thay đổi giá trị của nhãn –

+2

ok tôi tìm thấy nó bởi một số thử :) Tôi thực hiện một số thay đổi trên mã như: var onFavButtonTapped: ((Int) - > Void)? = Nil **** nếu chúng ta hãy onButtonTapped = self.onButtonTapped { onButtonTapped (3) } **** tế bào .onButtonTapped =! {(X: Int) trong println (x) } –

+0

tuyệt vời để Nghe!. BTW, nếu bạn tìm thấy câu trả lời của tôi hữu ích, xin vui lòng xem xét upvoting :) – raf

Các vấn đề liên quan