Как передать значение из действия кнопки ячейки табличного представления в другой контроллер View с помощью Swift

-1

Я хочу передать значение из кнопки TableView Cell на другой контроллер представления. Поскольку у меня есть кнопка в CellView TableView, я сталкиваюсь с проблемой при передаче значения через действие кнопки. пожалуйста, дайте ответ подробно, как я начинаю.

  • 0
    Просто установите yourButton.tag в cellForRow затем выберите выбранный тег кнопки через sender.tag в действии кнопки и получите доступ к элементу из массива таблицы и передайте его.
Теги:

2 ответа

0

Если вы используете 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.

0

Вы можете передать значение из 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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню