Обработка события касания кажется одинаковой как в iOS, так и в Android, но отличается, когда вы хотите его запрограммировать.

Даже само название называется по-разному.

В iOS это называется «нажать»; в Android это называется щелчок

Как их реализовать, рассказано ниже…

В iOS

Нажмите на кнопку

Есть 2 способа создать событие касания с помощью кнопки.

1. В представлении кнопок

См. диаграмму ниже.

На кнопке на панели просмотра (1) или на схеме представления (2) нажмите Control+перетаскивание мышью от кнопки к области класса ViewController.

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

Код появится, как показано ниже, и вам просто нужно добавить свой код соответствующим образом.

@IBAction func buttonTap(_ sender: Any) {
    // Add code to trigger when the button is tapped.
}

2. Из инспектора соединений

См. диаграмму ниже.

Сначала нажмите кнопку, затем на правой панели выберите вкладку Инспектор подключений. После этого перетащите мышью один из переключателей Отправленные события (в данном случае я буду использовать Touch Up Inside) и тянуться к коду.

Когда это произойдет, появится диалоговое окно, показанное ниже. Он напрямую нацелен на соединение Action. Вам просто нужно ввести название действия, и появится код.

Наконец, как и в подходе 1, появится приведенный ниже код, и вам просто нужно добавить свой код соответствующим образом.

@IBAction func buttonTap(_ sender: Any) {
    // Add code to trigger when the button is tapped.
}

Нажмите на представление

Мы можем подумать, что можем сделать то же самое для View. К сожалению, View обрабатывается по-другому, так как для View нет соединения Action.

Вместо этого нужно будет использовать UITapGestureRecognizerobject для захвата касания.

Ниже показаны 2 способа

1. Создание UITapGestureRecognizer с помощью конструктора интерфейсов.

См. диаграмму ниже.

Нажмите на библиотеку компонентов пользовательского интерфейса (1), и отобразится список компонентов пользовательского интерфейса (2), найдите Распознаватель жестов касания и перетащите его на (3) либо панель просмотра, либо схему просмотра.

После этого у вас появится компонент Tap Gesture Recognizer на панели просмотра.

С этим компонентом вы можете либо

  1. Следуйте первому подходу Button View выше и создайте соответствующее действие ИЛИ
  2. Создайте выход Tap Gesture Recognizer (щелкните и перетащите мышью его в код), после чего у вас будет объект, показанный ниже.
@IBOutlet var tapRecognizer: UITapGestureRecognizer!

Напишите функцию, которая будет принимать UITapGestureRecognizer, как показано ниже.

Примечание. Важно иметь @objc перед объявлением функции, чтобы подключиться к старой функциональности Objective C.

@objc private func tapped(_: UITapGestureRecognizer) {
    // Add code to trigger when the view is tapped.
}

Затем в вашем viewController viewDidLoad добавьте цель к объекту tapRecognizer, чтобы связать с функцией tapped.

Примечание. Важно иметь #selector для подключения к параметру Objective C @selector.

А self относится к UIViewController.

tapRecognizer.addTarget(self, action: #selector(tapped))

2. Ручное создание экземпляра UITapGestureRecognizer в коде

Без использования Interface Builder можно вручную создать экземпляр UITapGestureRecognizer

Но прежде всего нам нужно написать функцию, которая будет принимать UITapGestureRecognizer, как показано ниже.

@objc private func tapped(_: UITapGestureRecognizer) {
    // Add code to trigger when the view is tapped.
}

Затем, возможно, в viewDidLoad нашего класса UIViewController мы создаем экземпляр UITapGestureRecognizer и связываем с ним ViewController (то есть self, а также функцию tapped для вызова.

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: 
    self, action: #selector(tapped))
view.addGestureRecognizer(tap)

Наконец, как показано выше, добавьте tap к представлению, используя функцию addGestureRecognizer.

В Android

В Android, либо Button, либо View, способ обработки щелчка одинаков. Есть 2 подхода

1. Использование атрибута android:onClick в макете

В Android представление создается в XML-файле макета. Пример ниже.

Мы могли бы добавить к нему атрибут android:onClick, а затем добавить имя функции, которую мы хотим, чтобы событие щелчка запускало, в данном случае containerClicked

<FrameLayout
        android:onClick="containerClicked"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"/>

Затем в код нашего MainActivity, который мы называем настроенным с этим макетом, нам нужно добавить функцию containerClicked, как показано ниже, с view в качестве параметра.

fun containerClicked(view: View) {
    // Add code to trigger when the view is tapped.
}

2. Использование onClickListener в коде

Другой подход — обратный, когда вместо этого функция щелчка определяется со стороны кода.

На этот раз представление, которое мы хотим прослушивать, должно иметь идентификатор.

В приведенном ниже примере кода мы называем представление container.

<FrameLayout
        android:id="@+id/container"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"/>

В нашем коде в MainActivity, в функции onCreate (или в любом другом месте, где мы хотим запустить прослушивание), мы затем настраиваем onClickListener, как показано ниже, предоставляя ему лямбда

container.setOnClickListener {
    // Add code to trigger when the view is tapped.
}

Or

container.setOnClickListener(::containerClicked)

с функцией containerClicked, определенной как подход 1 выше. Но на этот раз функцию containerClicked можно было бы установить как private.

Этот второй подход предпочтительнее первого, поскольку он имеет более четкое логическое управление, указанное в коде.

Надеюсь, что отсюда вы сможете увидеть разные пути iOS и Android.

Что касается подхода с использованием кнопки, iOS очень похожа на Android, где событие касания в значительной степени обрабатывается с помощью функции.

Для подхода View для iOS потребуется объект UIGestureRecognizer для захвата события касания, в то время как Android сохранит тот же подход, что и на стороне Button.

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

Подпишитесь на меня в medium, Twitter, Facebook или Reddit, чтобы получать небольшие советы и обучение на Android, Kotlin и т. д. по смежным темам. ~Элье~