touchesBegan (:) не работает над таблицей / прокруткой - PullRequest
0 голосов
/ 04 июля 2018

Есть некоторые ТАК сообщения , но не связанные с моей ситуацией.

touchesBegan(:) не работает на tableview/scrollview. UITableView или UIScrollView потребляет все сенсорные события и не передается следующим респондентам. У меня есть контроллер базового вида, и я хочу получать сенсорные события в базовые контроллеры touchesBegan(:). В некоторых контроллерах дополнительного вида (расширяет контроллер базового вида) я использовал tableView. Когда я касаюсь tableView, его потребление и никакие события не получены в базовых контроллерах touchesBegan(:). Как с этим бороться?

Я хочу, чтобы касания поступали в базовые контроллеры touchesBegan(:) первыми. Затем, условно, я хочу разрешить подчиненным контроллерам, tableView потреблять это или нет.

import UIKit

class ItemCell: UITableViewCell {

    @IBOutlet weak var title: UILabel!
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.delegate = self
        self.tableView.dataSource = self
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("Touches began!")
    }

    func numberOfSections(in tableView: UITableView) -> Int { return 1 }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }

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

        let cell =  tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
        cell.title?.text = "Click me"
        return cell
    }
}

В этом коде выше вызывается print («штрихи начались!»), Когда я касаюсь вида за пределами таблицы. Но когда я прикасаюсь к столу, я все еще хочу запустить печать («Начались касания!»). Предположим, что просмотр таблицы занимает половину общего просмотра.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

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

1. вкл. viewDidLoad() -> tableView.keyboardDismissMode = .Drag

2. on tableViewCell Метод выбора (didSelectRowForIndexPath) Отказ от клавиатуры.

0 голосов
/ 04 июля 2018
func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    <#code#>
}

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

Для проверки просто tblview.isUserInteractionEnabled = false и проверки вашего метода viewcontroller touchesBegan вызовет метод.

Обновите файл класса, как показано ниже.

 class ItemCell: UITableViewCell {

    @IBOutlet weak var title: UILabel!
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, touchedTableviewTouchDelegate {

    @IBOutlet weak var tableView: touchedTableview!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.delegate = self
        self.tableView.dataSource = self
        self.tableView.touchedTableviewdelegate = self
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("Touches began!")
    }

    func numberOfSections(in tableView: UITableView) -> Int { return 1 }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }

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

        let cell =  tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
        cell.title?.text = "Click me"
        return cell
    }

    func touchesBegunInTableview(_ touches: Set<UITouch>, with event: UIEvent?) {
        //Here You can do any thing with touch
    }
}

protocol touchedTableviewTouchDelegate: class {
    func touchesBegunInTableview(_ touches: Set<UITouch>, with event: UIEvent?)
}

class touchedTableview: UITableView
{
    var touchedTableviewdelegate: touchedTableviewTouchDelegate?

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        touchedTableviewdelegate?.touchesBegunInTableview(touches, with: event)
    }

}
...