как получить данные, когда аксессуар для ячейки подключен в IOS - PullRequest
0 голосов
/ 04 марта 2019

у меня есть просмотр таблицы, в котором есть несколько ячеек, когда пользователь нажимает на ячейку, он выполняет какую-то другую функцию, и когда подключается аксессуар ячейки, я хочу, чтобы он перешел к другому контроллеру представления, я могу это сделать, но проблема в том, что я невозможность отправки данных в строку указателя пути ячейки, для отправки данных сначала нужно коснуться ячейки, а затем нажать на аксессуар для отправки данных. Вот код для просмотра таблицы

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.identifier {
    case "ShowDetail":
        if let ip = myTableView.indexPathForSelectedRow{
            if let svc = segue.destination as? DetailViewController{
                svc.selectedObject = (myCounters?[ip.row])!
            }
        }
    default:
        print("error in segue")
    }
}

Ответы [ 4 ]

0 голосов
/ 05 марта 2019

Попробуйте это,

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
        print("Index : \(indexPath.row)")

    var tempIndex: Int!
    var tempIdentifier: String!

    self.tempIndex = indexPath.row //You can store indexpath.row value in temp variable. And then then you can access it while performing any other functions.
    self.tempIdentifier = "ShowDetail" //This upto your needs.
}

// UIStoryboardSegue для перемещения по другому контроллеру соответственно.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.identifier {
    case "ShowDetail":
        if let ip = myTableView.indexPathForSelectedRow{
            if let svc = segue.destination as? DetailViewController{
                svc.selectedObject = (myCounters?[tempIndex])!
            }
        }
    default:
        print("error in segue")
    }
}
0 голосов
/ 04 марта 2019

благодаря @shahzaib qureshi я удалил соединение segue и использовал метод контроллера экземпляра представления в качестве контроллера детального просмотра в методе подключения вспомогательных элементов ячейки

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "detailvc") as? DetailViewController
    vc?.selectedObject = (myCounters?[indexPath.row])!
    navigationController?.present(vc!, animated: true, completion: nil)
    print("ewwewew")
}
0 голосов
/ 04 марта 2019

Просто передайте путь индекса в параметре sender, довольно просто:

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { 
    performSegue(withIdentifier: "ShowDetail", sender: indexPath) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
   if segue.identifier == "ShowDetail" { 
       let indexPath = sender as! IndexPath
       let svc = segue.destination as! DetailViewController
       svc.selectedObject = myCounters![indexPath.row]
   }
} 
0 голосов
/ 04 марта 2019
func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "detailvc") as? DetailViewController
vc?.selectedObject = (myCounters?[indexPath.row])!
navigationController?.present(vc!, animated: true, completion: nil)
}
...