Обработка события касания кажется одинаковой как в 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.
Вместо этого нужно будет использовать UITapGestureRecognizer
object для захвата касания.
Ниже показаны 2 способа
1. Создание UITapGestureRecognizer
с помощью конструктора интерфейсов.
См. диаграмму ниже.
Нажмите на библиотеку компонентов пользовательского интерфейса (1), и отобразится список компонентов пользовательского интерфейса (2), найдите Распознаватель жестов касания и перетащите его на (3) либо панель просмотра, либо схему просмотра.
После этого у вас появится компонент Tap Gesture Recognizer на панели просмотра.
С этим компонентом вы можете либо
- Следуйте первому подходу Button View выше и создайте соответствующее действие ИЛИ
- Создайте выход 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 и т. д. по смежным темам. ~Элье~