UIKit

一部cellだけのheight指定する

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if 条件 { return 高さ } else { return UITableView.automaticDimension } }

特定ViewControllerのダークモード無効化(もしくはライトモード無効化)

override func viewDidLoad() { ... self.overrideUserInterfaceStyle = .light } 上記コードだと、該当ViewControllerはずっとライトモードになる。逆に= .darkにするとずっとダークモードになる。

連続アニメーション

下記の例は、先に画像を2倍に拡大して、次左に90度回転して、更に右に180度回転して、最後元に戻るアニメーションです。 let scaleTransform = CGAffineTransform(scaleX: 2, y: 2) let leftRotateTransform = scaleTransform.concatenating(CGAffineT…

ViewControllerに検索機能追加

class ViewController: UIViewController { let searchController = UISearchController() override func viewDidLoad() { super.viewDidLoad() searchController.searchResultsUpdater = self navigationItem.searchController = searchController } } exte…

画面半分表示のModal View

iOS 15+では、新しいSafariブックマークのような画面半分表示のModal Viewが作れるようになりました。 let modalVC = ModalViewController() let modalNC = UINavigationController(rootViewController: modalVC) if #available(iOS 15.0, *) { if let sheet…

UIKitでStoryboardなしのアプリを作る

XcodeでUIKitのアプリを作成する。 Main.storyboardを削除する。 ProjectファイルのTarget -> General -> Deployment Info -> Main Interfaceを空欄にする。 Info.plist -> Application Scene Manifest -> Scene Configuration -> Application Session Role …

iPadでActionSheetを表示する

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

新世代の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…

UIPickerViewで入力内容を選択

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

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 …

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:>…

Open URL by Safari

if let url = URL(string: "https://cecilma2018.blogspot.com") { UIApplication.shared.open(url, options: [:]) }