2020-01-01から1年間の記事一覧

多言語対応メモ

普通Stringの翻訳:Localizable.strings App表示名の翻訳:InfoPlist.stringsの中下記のように記載 "CFBundleDisplayName" = "剪贴板清除者"; 便利のLocalize拡張 extension String { func localized() -> String { return NSLocalizedString(self, comment:…

クラス、方法、パラメーターのコメント便利追加法

command + option + /

App Storeのアプリページに遷移して、レビュー画面を表示

guard let writeReviewURL = URL(string: "https://apps.apple.com/app/idXXXXXXXXXX?action=write-review") else { fatalError("Expected a valid URL") } UIApplication.shared.open(writeReviewURL, options: [:], completionHandler: nil)

SwiftUIのライフサイクル

@main struct SomeApp: App { @Environment(\.scenePhase) private var scenePhase var body: some Scene { WindowGroup { ContentView() }.onChange(of: scenePhase) { (phase) in switch phase { case .active: // The scene is in the foreground and int…

RxSwiftの簡単運用

最近シンプル卓球スコアボードにRxSwiftを導入しました。点数パネルをタッチするとModel更新の同時、Viewも連動で更新するようになりました。 Model: import Foundation import RxCocoa import RxSwift class Scoreboard { var gameL = BehaviorRelay(value…

iPadでActionSheetを表示する

iPadでActionSheetを正しく呼び出す元の近くで表示させるため、popoverPresentationControllerのsourceViewとsourceRectの設定が必要です。 例: @IBAction func dataPressed(_ sender: UIButton) { let ac = UIAlertController(title: nil, message: nil, p…

UIKitのプロジェクトにSwiftUIのViewを呼び出す

let pcHostingController = UIHostingController(rootView: PcView(pc: selectedPc)) navigationController?.pushViewController(pcHostingController, animated: true)

Format String

let priceString = "$1" let formattedString = String(format: "Purchase colorful dice by %@", priceString) print(formattedString) >> Purchase colorful dice by $1 formatの中のPlaceholderについて、%@はString型の引数、%dはInt型の引数、%fはDoubl…

MacOS 11 beta: ZStack inside GeometryReader

私のアプリ美しいサイコロはMacOS 11 betaでテストする時バグが出た。 本来サイコロは画面の真ん中表示するはずだが、なぜかMacOS 11 betaには左上になってしまいました。 本来あるべき姿 MacOS 11 betaのバグ よく調べると、GeometryReaderの中のZStack、本…

Catalystアプリにタッチバーボタンの実装

例:私のアプリプロ卓球スコアボードに二つのタッチバーボタンで両サイドの点数を追加機能がある。以下は関連のコード。 タッチバーのIdentifierの定義: #if targetEnvironment(macCatalyst) import UIKit extension NSTouchBarItem.Identifier { static le…

新世代のUITableViewController:DiffableDataSource + 検索機能

最終効果: 検索欄で検索文字を入力する時表示内容は動的に変更する。 Memo struct Memo: Hashable { var id = UUID().uuidString var title = "" var detail = "" var editTime = Date() func hash(into hasher: inout Hasher) { hasher.combine(id) } } Me…

アプリのコンテンツ(テキスト、画像など)をシェアする

override func viewDidLoad() { super.viewDidLoad() ... navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped)) } @objc func shareTapped() { let avc = UIActivityViewCont…

App内でウェブサイトを表示

import UIKit import SafariServices extension UIViewController { func presentSafariVC(with url: URL) { let safariVC = SFSafariViewController(url: url) present(safariVC, animated: true) } }

ViewControllerに更にViewControllerを追加する

func add(childViewController: UIViewController, to containerView: UIView) { self.addChild(childViewController) containerView.addSubview(childViewController.view) childViewController.view.frame = containerView.bounds childViewController.did…

Loading画面の表示

UIViewControllerにshowLoadingViewとdismissLoadingViewという二つFunctionを拡張する。 import UIKit fileprivate var loadingView: UIView! extension UIViewController { func showLoadingView() { loadingView = UIView(frame: view.bounds) view.addSu…

for ... in文の中にインデックスを取得する方法

for (index, player) in players.enumerated() { ... }

UIPickerViewで入力内容を選択

例:テキストボックスtxtPlayerをクリックすると、UIPickerViewが表示される。「完了」ボタンを押すと選択された内容がテキストボックスに表示される。 class PlayerViewController: UIViewController { @IBOutlet var txtPlayer: UITextField! let pickerVi…

Macbookで他社マウスを使う時スクロール方向設定法

Mac

Mac自分の設定メニューに、マウスのスクロール方向設定のオプションがあるが、設定するとTrackpadの方向は逆になってしまった。幸い、ネットでScroll Reverserというアプリを発見した。それを使うと、マウスだけのスクロール方向が調整できる。 Scroll Rever…

Notification送信と受信

サンプル:送信側は受信側にテーブルリロードを要求する。 Notification名前定義: extension NSNotification.Name { static let reload = Self.init("reload") } 送信側: NotificationCenter.default.post(name: .reload, object: nil) 受信側: override …

Inputboxをalertで表示する

サンプル:alert表示のInputboxで現在のViewControllerのname属性を修正するロジック let ac = UIAlertController(title: "New Name", message: "", preferredStyle: .alert) let done = UIAlertAction(title: "Done", style: .default) { [weak self, weak …

Dateから年、月、日の部分だけ取得

let calendar = Calendar(identifier: .gregorian) //西暦 let currentDate = Date() let currentYear = calendar.component(.year, from: currentDate) let currentMonth = calendar.component(.month, from: currentDate) let currentDay = calendar.compo…

xibで再利用可能のViewを作る

1、Command+Nで新規ファイルウィンドウを開く、中にUser Interface下のViewを新規する。新規したのはxibファイル。xibファイルの編集方法はStoryboardと大体同じ。 2、UIViewを継承して自分のViewクラスを作成、xibファイルを自分のサブビューとして追加す…

FullScreenで次のViewを表示

Extension定義 extension UIViewController { func presentWithFullScreen<T: UIViewController>(storyboardId: String, handler: ((T) -> Void)?){ let vc = self.storyboard?.instantiateViewController(identifier: storyboardId) as! T if let wrappedHandler = handler { wra</t:>…

DateFormatterを使ってDateをStringに変換

func formatDate(_ date: Date) -> String { let formatter = DateFormatter() formatter.dateStyle = .short formatter.timeStyle = .short return formatter.string(from: date) } dateStyleとtimeStyleはnone、short、medium、long、fullという選択肢があ…