Разработка
Перетаскивание и буфер обмена с помощью Transferable
Используя Transferable, вы не только упрощаете реализацию, но и делаете своё приложение совместимым с современными формами взаимодействия, от буфера обмена до перетаскивания, используя единую модель данных.
Для приложений, требующих множественных взаимодействий, таких как перетаскивание файлов или копирование и вставка данных, используйте протокол Transferable, чтобы обеспечить совместное использование сущностей вашей модели между приложениями или между областями одного приложения.
Для использования копирования и вставки и перетаскивания вам потребуется стандартный шаблон структуры. Эта структура будет совместима с действиями, которые мы хотим воспроизвести в приложении.
В следующем примере определяется тип NoteItem, соответствующий протоколу Transferable, предоставляя представление для передачи данных, которое можно использовать при трансфере.
import SwiftUI import UniformTypeIdentifiers struct NoteItem: Codable, Transferable, Identifiable { var id: UUID = UUID() var text: String static var transferRepresentation: some TransferRepresentation { DataRepresentation(contentType: .plainText) { note in note.text.data(using: .utf8) ?? Data() } importing: { data in let content = String(decoding: data, as: UTF8.self) return NoteItem(text: content) } ProxyRepresentation { note in return note.text } } }
Копирование и вставка
Для копирования и вставки используйте UIPasteboard. Это объект, позволяющий пользователю переносить данные из одного места в другое с помощью буфера обмена системы.
func copyToClipboard(note: NoteItem) {
UIPasteboard.general.string = note.text
}
func pasteNote() -> NoteItem? {
if let text = UIPasteboard.general.string {
return NoteItem(text: text)
}
return nil
}
Используя SwiftUI, можно подключить к интерфейсу следующие функции:
- Кнопка «Копировать» для отправки содержимого в буфер обмена
- Кнопка «Вставить» для чтения содержимого из буфера обмена и обновления состояния представления
struct ExampleView: View {
@State private var notes = [
NoteItem(text: "First note 📝"),
NoteItem(text: "Second note ✈️")
]
var body: some View {
Button("Copy") {
copyToClipboard(note: notes[index])
}
Button("Paste") {
if let item = pasteNote() {
droppedNotes.append(item)
}
}
}
}
Перетаскивание
Благодаря соответствию требованиям Transferable ваши модели объектов также будут работать с API перетаскивания SwiftUI:
Text(sourceNote.text)
.draggable(sourceNote)
Элемент уже автоматически упакован как .plainText, поскольку мы определили это в TransferRepresentation. SwiftUI интерпретирует перетаскивание, преобразует данные и возвращает готовый к использованию шаблон:
Text(droppedText)
.dropDestination(for: NoteItem.self) { items, _ in
if let first = items.first {
droppedText = "Received: \(first.text)"
}
return true
}
Используя Transferable, вы не только упрощаете реализацию, но и делаете своё приложение совместимым с современными формами взаимодействия, от буфера обмена до перетаскивания, используя единую модель данных.
В этой статье подробно показано, как реализовать перетаскивание с помощью API SwiftUI. Ознакомьтесь!
-
Аналитика магазинов3 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Видео и подкасты для разработчиков3 недели назад
Разбор кода: iOS-приложение для управления личными финансами на Swift. Часть 1
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.47
-
Разработка4 недели назад
100 уроков о том, как я довёл своё приложение до продажи за семизначную сумму

