Я хочу передать значение из кнопки TableView Cell на другой контроллер представления. Поскольку у меня есть кнопка в CellView TableView, я сталкиваюсь с проблемой при передаче значения через действие кнопки. пожалуйста, дайте ответ подробно, как я начинаю.
Если вы используете segues, метод перехода от одного контроллера представления к следующему - это использовать метод под названием prepare (for: sender :). Всякий раз, когда срабатывает segue, вы предоставляете код для хранения данных или любой очистки
Например, на веб-сайте разработчика Apple
Подготовьте объект данных (для этого, возможно, отдельный 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 - В методе подготовки источника. Создайте метод подготовки. Вызовите super.prepare и создайте объект, который вы хотите отправить здесь.
2 - Принимающая сторона создает @IBAction func YOUMETHODNAME (отправитель: UIStoryboardSegue). Downcast UIViewController для ur view view controller и получить объект, который вы создали на первом шаге.
Надеюсь это поможет.
для получения дополнительной информации см. https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementNavigation.html.
Вы можете передать значение из OneViewController в OtherViewController на кнопке TableViewCell, щелкнув, используя подход делегата.
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
}
yourButton.tag
вcellForRow
затем выберите выбранный тег кнопки черезsender.tag
в действии кнопки и получите доступ к элементу из массива таблицы и передайте его.