Передать значение с помощью кнопки листа действий

Я создал ActionSheet с действием кнопки. У меня есть кнопка, которая открывает лист действий и кнопка ActionSheet открывает новые viewController, Проблема в том, что кнопка, которая открывает лист действий, находится внутри tableview cell и я не знаю, как передать значение с помощью этой кнопки.

Концепция должна быть примерно такой, но с кнопкой списка действий:

    actionSheet.addAction(UIAlertAction(title: "Edit it", style: UIAlertActionStyle.destructive, handler: { (ACTION :UIAlertAction!)in
            //here I want to pass value to next viewController and open that VC.
           //Valu should be something like postsArray[indexPath.row]
  }))

2 ответа

Решение

При нажатии кнопки вы показываете ActionSheet и вы хотите, чтобы индекс этой кнопки на prepareforSegue метод, поэтому вам нужно хранить IndexPath нажатой кнопки на действие кнопки, а затем представить ActionSheet для этого объявить один экземпляр типа IndexPath и использовать его внутри вашего действия кнопки.

var selectedIndexPath = IndexPath()

@IBAction func buttonTapped(_ sender: UIButton) {
    let point = tableView.convert(CGPoint.zero, from: sender)
    if let indexPath = tableView.indexPathForRow(at: point) {
        self.selectedIndexPath = indexPath
        //Add code for presenting ActionSheet
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "editPost" {
        let dest = segue.destination as! EditPostViewController
        dest.selectedPost = postsArray[self.selectedIndexPath.row]
    }
}

Попробуйте использовать метод делегата.

protocol ActionSheetDelegate{
   func transferSomeData(message : String)
  }

class customCell : UITableViewCell {

  var customCellDelegate : ActionSheetDelegate!

  ...
    actionSheet.addAction(UIAlertAction(title: "Edit it", style: UIAlertActionStyle.destructive, handler: { (ACTION :UIAlertAction!)in
        self.customCellDelegate.transferSomeData(message : "yourMessage")
     })
    )
  ...


}

В вашей текущей таблице ViewController

class yourTableViewController : UITableViewController, UITableViewDelegate, UITableViewDataSource, ActionSheetDelegate {

 override func viewDidLoad(){


    }

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

     let cell = customTableView.dequeueReusableCell(withIdentifier: "customCell") as! customTableViewCell 

     cell.customCellDelegate = self

     return cell 

   }

 func transferSomeData(message : String){

       print(message)
       // Segue to someViewController

     }
  }
Другие вопросы по тегам