我想将值从TableView Cell按钮传递到另一个视图控制器。因为我在TableView Cell中有按钮,所以在通过按钮操作传递值时遇到问题。请详细解答,因为我是Begineer。
答案 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源视图控制器并获取您在第一步中创建的对象。
希望这有帮助。