将信息传递给自定义TableViewCell - Swift

时间:2015-05-31 22:04:07

标签: uitableview swift delegates datasource tableviewcell

问题是:我尝试了很多方法从SecondViewController向ViewController1传递信息。在第一个ViewController1中,我有一个tableView,在这个tableView中,每个单元格都会收到一个图像和一个标签。我想要做的是,在SecondViewController中,我将在textField中编写一些内容并选择一些随机图像并将其显示在ViewController1中。

有人可以告诉我该怎么做吗?我尝试了代表,dequeuereusablecell,并且数据不会在单元格中显示。

提前致谢!

修改

这是我的代码:

ViewController 1:

导入UIKit

类FirstViewController:UIViewController,UITableViewDelegate,UITableViewDataSource,sendDataToFVCDelegate {

@IBOutlet var tableView: UITableView!
var labelsListArray = [""]

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func myVCDidFinish(text: String) {
    labelsListArray.append(text)
    tableView.reloadData()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return labelsListArray.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let row = indexPath.row
    let textLabel = labelsListArray[row]
    var cell = tableView.dequeueReusableCellWithIdentifier("ImageView") as? CustomCellTableViewCell
    cell!.cellLabel!.text = textLabel
    return cell!
}

}

ViewController 2:

导入UIKit

protocol sendDataToFVCDelegate {     func myVCDidFinish(text:String) }

类Sec​​ondViewController:UIViewController {

var delegate:sendDataToFVCDelegate?
@IBOutlet var textField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func addButton(sender: AnyObject) {

    if textField == nil { return }
    let name = textField.text
    println("\(name)")

    if delegate == nil { return }
    delegate?.myVCDidFinish(name)

    if let navigation = self.navigationController {
        navigation.popViewControllerAnimated(true)
    }
}

}

TableViewCell:

导入UIKit

class CustomCellTableViewCell:UITableViewCell {

@IBOutlet var cellImage: UIImageView!
@IBOutlet var cellLabel: UILabel!



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
}

}

我做错了什么?现在连线" popViewControllerAnimated"回到第一个视图控制器。

非常感谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

所以你的自定义TableViewCell应该拥有它自己的类(例如ImageTableViewCell),它会处理你在加载TableView时设置的图像:

@IBOutlet var titleLabel: UILabel!
@IBOutlet var imageView: UIImageView!

并在TableView中:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("ImageView") as? ImageTableViewCell
        cell!.titleLabel!.text = textFrom2VC
        cell!.imageView.image = imageFrom2VC
        return cell!
}

你必须通过委托从其他视图中获取这些内容。在第二个VC中你有

protocol SecondVCDelegate{
    func myVCDidFinish(controller:SecondVC, text: String, image: UIImage)
}
你用

打电话的

    var delegate:SecondVCDelegate.myVCDidFinish(self, text: "this is random text", image: (your image) )

并且在第一个(确认协议SecondVCDelegate)中有

func myVCDidFinish(controller: SecondVC, text: String, image: UIImage) {
    textFrom2VC = text
    imageFrom2VC = image
    controller.navigationController?.popViewControllerAnimated(true)
    self.tableView.reloadData()
}