目次
概要
Gitなどでブランチ名の部分をクリックすると、クリップボードへコピーすることができる。
そのため、「ここに表示してある文字列をコピーできれば」という悩みを解決することができる。
アプリでもこれを知っておけば、ちょっとしたユーザーの手間を省かせることができると思う。
ソースコード
起動時
import SwiftUI
@main
struct TestApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ClipBoardTestView()
}
}
}
View部分
import SwiftUI
struct ClipBoardTestView: View {
enum Field: Hashable {
case copyTextField
case pasteTextField
}
@ObservedObject private var viewModel = ClipBoardTestViewModel()
@FocusState private var focusedField: Field?
var body: some View {
VStack {
Spacer()
HStack {
TextField("コピーする文字列を入力してください", text: $viewModel.copiedText)
.textFieldStyle(.roundedBorder)
.focused($focusedField, equals: .copyTextField)
.onTapGesture {
focusedField = .copyTextField
}
Button {
viewModel.copyText()
} label: {
Image(systemName: "square.on.square")
}
}
Spacer()
TextField("コピーした文字列をペーストしてください", text: $viewModel.pastedText)
.textFieldStyle(.roundedBorder)
.focused($focusedField, equals: .pasteTextField)
.onTapGesture {
focusedField = .pasteTextField
}
Spacer()
}
.frame(maxWidth: .infinity ,maxHeight: .infinity)
.contentShape(RoundedRectangle(cornerRadius: 0))
.onTapGesture {
focusedField = .none
}
}
}
処理部分
import UIKit
class ClipBoardTestViewModel: ObservableObject {
@Published var copiedText: String = ""
@Published var pastedText: String = ""
func copyText() {
UIPasteboard.general.string = copiedText
}
}
デモ動画
詳細
UIPasteboardクラスを使用してクリップボードにコピーすることができる。
文字列だけでなく、以下のように画像やURL、色もクリップボードにコピーすることができる。
コピーしたいデータ | コピー方法 |
文字列 | UIPasteboard.general.string = “[コピーする文字列]” |
画像 | UIPasteboard.general.image = UIImage(named: “[コピーする画像名]”) |
URL | UIPasteboard.general.url = URL(string: “[コピーするURL]”) |
色 | UIPasteboard.general.color = [コピーする色](例:UIColor.white) |
また、TextFieldのフォーカスに関しても記載しているが、それはTextFieldのページに記載しようろ思う。
参考ページ
Webエンジニア学習部屋「【SwiftUI】クリップボードにコピーする方法!自作ボタンでバルーン表示」
Webエンジニア学習部屋「【SwiftUI】@FocusStateとは?複数の入力フォームのフォーカスコントロール」
NonaTechブログ「【SwiftUI】画面タップでキーボードを閉じる方法」