2016-10-20 3 views
0

Я создал 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] 
    })) 
+0

* значение пропуск * к чему? Лист действия или viewController? Обновите свой вопрос с помощью кода actionSheet Block и укажите, где именно вы хотите это значение. – Dravidian

ответ

1

На кнопке действия вы показываете 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] 
    } 
} 
+0

Является ли кнопка внутри ячейки управляемой, как selectedIndexPath, тоже самой ячейкой? Но так, как это выбралПотом прошло значение nil :( –

+0

@ TarvoMäesepp Не понимаю, что вы пытаетесь сказать, пожалуйста, объясните подробнее. –

+0

@ TarvoMäesepp Теперь он работает? –

1

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

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") 
    }) 
    ) 
    ... 


} 

В текущем tableViewController

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 

    } 
    } 
Смежные вопросы