委托模态视图swift

时间:2014-11-25 07:28:26

标签: ios uitableview swift

我已经尝试了其他方法用于委托和协议,以便在模态视图和父视图按钮之间传递数据,它们对我来说不起作用。这显然是因为我错误地实施了它们。

我所拥有的是一个父视图控制器,它有一个tableviewcell,在右边的细节中会告诉你从模态视图中的选择。模态视图是另一个表视图,它允许您选择一个单元格,该单元格更新正确的细节并解除模态视图。除实际数据传输外,一切正常。

提前致谢!! :)

这是我的父视图控制器的代码:

class TableViewController: UITableViewController, UITextFieldDelegate {

//Properties

var delegate: transferData?

//Outlets
@IBOutlet var productLabel: UILabel! 
@IBOutlet var rightDetail: UILabel!





override func viewWillAppear(animated: Bool) {
    println(delegate?.productCarrier)
    println(delegate?.priceCarrier)
    if delegate?.productCarrier != "" {
        rightDetail.text = delegate?.productCarrier
        productLabel.text = delegate?.productCarrier
    }
}


override func viewDidLoad() {
    super.viewDidLoad()

}



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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 5
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 1
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}



}

模型视图控制器和协议的代码是:

protocol transferData {
var priceCarrier: Double { get set }
var productCarrier: String { get set }
}

class ProductsDetailsViewController: UITableViewController, transferData {
//Properties

var priceCarrier = 00.00
var productCarrier = ""


//Outlets


//Actions

@IBAction func unwindToViewController(segue: UIStoryboardSegue) {
    self.dismissViewControllerAnimated(true, completion: nil)


}


override func viewDidLoad() {
    super.viewDidLoad()
    populateDefaultCategories()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return Int(Category.allObjects().count)
}


override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return (Category.allObjects()[UInt(section)] as Category).name
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.

    return Int(objectsForSection(section).count)


}

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

    var cell:ProductListCell = tableView.dequeueReusableCellWithIdentifier("productCell", forIndexPath: indexPath) as ProductListCell

    let queriedProductResult = objectForProductFromSection(indexPath.section, indexPath.row)

    cell.name.text = queriedProductResult.name
    cell.prices.text = "$\(queriedProductResult.price)"

return cell


}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let indexPath = self.tableView.indexPathForSelectedRow()!

    let product = objectForProductFromSection(indexPath.section, indexPath.row)

    let PVC: TableViewController = TableViewController()

    println("didSelect")
    productCarrier = product.name
    priceCarrier = product.price

    println(productCarrier)
    println(priceCarrier)


    self.dismissViewControllerAnimated(true, completion: nil)


}

1 个答案:

答案 0 :(得分:0)

我认为要传递数据,你应该使用segue:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

let indexPath = self.tableView.indexPathForSelectedRow()!
let product = objectForProductFromSection(indexPath.section, indexPath.row)

println("didSelect")
productCarrier = product.name
priceCarrier = product.price

println(productCarrier)
println(priceCarrier)

self.performSegueWithIdentifier("displayYourTableViewControllerSegue", sender: self)

}

然后覆盖prepareForSegue函数:

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var controller = segue.destinationViewController as TableViewController
    controller.rightDetail.text = "\(self.priceCarrier)"
    controller.productLabel.text = self.productCarrier
  }