Передача данных при длительном нажатии в ячейке табличного представления - PullRequest
0 голосов
/ 03 ноября 2019

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

введите описание изображения здесь

VC 1:

  override func viewDidLoad() {
        super.viewDidLoad()

        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longpress))
        tbMain.addGestureRecognizer(longPress)
}

Долгое нажатиеМетод для ячейки табличного представления:

  @objc func longpress(sender: UILongPressGestureRecognizer) {

        if sender.state == UIGestureRecognizer.State.began {
            let touchPoint = sender.location(in: tbMain)
            if tbMain.indexPathForRow(at: touchPoint) != nil {

                let cell = tbMain.dequeueReusableCell(withIdentifier: "testCell") as! NewContactCell

                print("Long press Pressed:)")

                self.actionVC = self.storyboard!.instantiateViewController(withIdentifier: "ActionsViewController") as? ActionsViewController

                UIView.transition(with: self.view, duration: 0.25, options: [.transitionCrossDissolve], animations: {
                    self.view.addSubview( self.actionVC.view)
                }, completion: nil)


            }
        }
    }

VC 2:

 internal var strPhoneNUmber : String!
 internal var strEmail : String!

    override func viewDidLoad() {
        super.viewDidLoad()
        print("Phone: \(strPhoneNUmber!)")
        // Do any additional setup after loading the view.
    }

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

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

protocol YourDelegate : class { 
func passData(phoneNumber: String, email: String)
}
weak var delegate: YourDelegate?


@objc func longpress(sender: UILongPressGestureRecognizer) {

    if sender.state == UIGestureRecognizer.State.began {
        let touchPoint = sender.location(in: tbMain)
        if tbMain.indexPathForRow(at: touchPoint) != nil {

            let cell = tbMain.dequeueReusableCell(withIdentifier: "testCell") as! NewContactCell

            print("Long press Pressed:)")



            self.actionVC = self.storyboard!.instantiateViewController(withIdentifier: "ActionsViewController") as? ActionsViewController
self.delegate = self
**delegate?.passData(cell.strPhoneNumber, cell.strEmail)**

            UIView.transition(with: self.view, duration: 0.25, options: [.transitionCrossDissolve], animations: {
                self.view.addSubview( self.actionVC.view)
            }, completion: nil)


        }
    }
}



class ???: UIViewController, YourDelegate {
 var strPhoneNUmber : String!
 var strEmail : String!

override func viewDidLoad() {
    super.viewDidLoad()
    print("Phone: \(strPhoneNUmber!)")
    // Do any additional setup after loading the view.
}

func passData(phoneNumber: String, email: String) {
handle...
}
}

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

actionVC.strPhoneNumber = cell.strPhoneNumber

или использовать переход

    self.performSegue(withIdentifier: "yourIdentifier", sender: arr[indexPath.row])

используйте команду prepare для segue, чтобы создать экземпляр для установки его свойств в соответствии с отправителем.

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destvc = segue.destination as? YourClass
        destvc.phoneNumber = sender.phoneNumber as? String
        destvc.email = sender.email as? String

    }
0 голосов
/ 03 ноября 2019

Получить номер телефона и адрес электронной почты от объекта ячейки

self.actionVC.strPhoneNUmber = cell.strPhoneNUmber // get phone number from cell object 
self.actionVC. strEmail = cell.strEmail // get email from cell object 

код будет выглядеть как

@objc func longpress(sender: UILongPressGestureRecognizer) {
    if sender.state == UIGestureRecognizer.State.began {
        let touchPoint = sender.location(in: tbMain)
        if tbMain.indexPathForRow(at: touchPoint) != nil {

            let cell = tbMain.dequeueReusableCell(withIdentifier: "testCell") as! NewContactCell

            print("Long press Pressed:)")

            self.actionVC = self.storyboard!.instantiateViewController(withIdentifier: "ActionsViewController") as? ActionsViewController
            **self.actionVC.strPhoneNUmber = cell.strPhoneNUmber // get phone number from cell object 
            self.actionVC. strEmail = cell.strEmail // get email from cell object**
            UIView.transition(with: self.view, duration: 0.25, options: [.transitionCrossDissolve], animations: {
                self.view.addSubview( self.actionVC.view)
            }, completion: nil)


        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...