Передать значение с помощью кнопки листа действий
Я создал 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
}
}