如何使用Swift将值从tableview单元格Button操作传递到其他View控制器

时间:2017-05-26 06:38:03

标签: swift

我想将值从TableView Cell按钮传递到另一个视图控制器。因为我在TableView Cell中有按钮,所以在通过按钮操作传递值时遇到问题。请详细解答,因为我是Begineer。

2 个答案:

答案 0 :(得分:0)

你可以使用委托方法在TableViewCell的Button点击上将值从OneViewController传递给OtherViewController。

class OneViewController : UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate {

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cellIdentifier = "CustomCell"
        var cell : CustomCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! CustomCell?
        if (cell == nil) {

            cell = Bundle.main.loadNibNamed("CustomCell", owner: nil, options: nil)?[0] as? CustomCell
        }

        cell?.delegate = self
        return cell!
    }

    buttonClickAtIndex:(_ index : Int) {

       let value : Any = dataSource[index]
       let otherViewController : OtherViewController ///Create variable of OtherViewController
       otherViewController.value 
       /// push OtherViewController
    }

}

protocol CustomCellDelegate : class {

  func buttonClickAtIndex:(_ index : Int)
}

class CustomCell : UITableViewCell {

IBOutlet weak var button : UIButton!
weak var delegate : CustomCellDelegate?

   func buttonClick(_ sender : UIButton) {

      if let _delegate = delegate {
         _delegate.buttonClickAtIndex:(sender.tag)
      }
   }

}

class OtherViewController : UIViewController {

   var value : Any /// set Type and default value
}

答案 1 :(得分:0)

如果您使用segues,则从一个视图控制器传递到下一个视图控制器的方法是使用名为prepare(for:sender :)的方法。每当segue被触发时,您都会提供数据存储或任何清理的代码

例如来自苹果开发者网站

准备要从源视图控制器发送的数据对象(可能是单独的swift文件)(在本例中为MealViewController)。准备好简单的膳食对象。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

super.prepare(for: segue, sender: sender)

// Configure the destination view controller only when the save button is pressed.
guard let button = sender as? UIBarButtonItem, button === saveButton else {
    os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug)
    return
}

let name = nameTextField.text ?? ""
let photo = photoImageView.image
let rating = ratingControl.rating

// Set the meal to be passed to MealTableViewController after the unwind segue.
meal = Meal(name: name, photo: photo, rating: rating) 
}

接下来将这些代码放在接收端。

@IBAction func unwindToMealList(sender: UIStoryboardSegue) {
    if let sourceViewController = sender.source as? MealViewController, let meal = sourceViewController.meal {

        // Add a new meal.
        let newIndexPath = IndexPath(row: meals.count, section: 0)

        meals.append(meal)
        tableView.insertRows(at: [newIndexPath], with: .automatic)
    }
}

这里我们首先尝试将它从UIViewController转发到MealViewController。并获取餐食对象并填写餐桌。如果你不了解这里发生的一切,请不要担心。

重要部分是。

1 - 在Source View Controller.Create prepare方法中。调用super.prepare并创建要在此处发送的对象。

2 - 接收方创建@IBAction func YOUMETHODNAME(发送者:UIStoryboardSegue)。将UIViewController向下转换为ur源视图控制器并获取您在第一步中创建的对象。

希望这有帮助。

了解更多信息 https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementNavigation.html