PickerをPopoverで表示するライブラリの紹介


自己紹介

この資料は、2016年10月6日に株式会社Fabricで開催されたshibuya.swiftでLTとして発表したものです。


SwiftyPickerPopoverの動作イメージ


SwiftyPickerPopoverとは


用途

  • 遷移させずに、何らかの日時やカウントダウン時間を得たい場合
  • 同じく、文字列の選択肢をピッカーから選ばせたい場合
  • iOS9でDeprecatedになったUIPopoverControllerを使っているライブラリの置き換えとしてサクッと使う
  • UXにおいては、アクションシートスタイルのピッカーよりも指の移動量が減るので有利。
  • 開発においては、iPadとiPhoneのUIを同じに保てる。デザインや実装の作業分岐が不要になる。

開発背景

  • iOS9でDeprecatedになったUIPopoverControllerを使っているライブラリの置き換えとして開発した。
  • ActionSheetPickerは大変優れたObjective-CベースのライブラリですがUIPopoverControllerを前提にしている。

特徴

  • Swift 3(Swift 2.3のブランチもあります。詳しくはREADME.mdをご覧ください), Xcode 8, iOS9+に対応。iPhone, iPadいずれも対応。
  • MITライセンス。
  • 1行で記述できる。
  • CocoaPodsやCarthageで簡単にインストールできる。
  • 文字列を1カラムで選択させるピッカー、複数列で選択させるピッカー(※)、日時を選択するピッカー、カウントダウン時間のピッカーを用意(※)。

※ Ken Torimaruさんのコントリビーションによります。オープンソース文化は本当に素晴らしいですね。


コードサンプル

文字列の選択をさせるピッカーStringPickerPopoverを表示させるコード。(下のスクリーンショットの一番左)

let displayStringFor:((String?)->String?)? = { string in
   if let s = string {
      switch(s){
      case "value 1":
        return "😊"
      case "value 2":
         return "😏"
      case "value 3":
         return "😓"
      default:
         return s
      }
    }
  return nil
  }

  StringPickerPopover.appearFrom(
   originView: button,
   baseViewController: self,
   title: "StringPicker",
   choices: ["value 1","value 2","value 3"],
   displayStringFor: displayStringFor,
   initialRow:0,
   doneAction: { selectedRow, selectedString in print("done row \(selectedRow) \(selectedString)")} ,
   cancelAction: { print("cancel")}
  )

originView: Pickerの入ったPopoverの起点となるView
baseViewController: 出現元となるViewController
title: Popoverのタイトル
choices: 選択肢の文字列の配列
displayStringFor: 内部的な選択肢と表示するための選択肢の置き換えを記述するクロージャー。省略可能。
initialRow: 初期選択ロー
doneAction: Doneボタンを押下した時に呼ばれるコールバック。選択されたRowと文字列を利用できる。
cancelAction: Cancelボタンを押された時やポップオーバーが閉じられた時の挙動。


CocoaPodsへの自作ライブラリの登録手続き


Carthage対応

Swift3製ライブラリをCarthage対応したときの手順
http://qiita.com/hsylife/items/19386c9b7c4132da1189


ライブラリ公開の告知先

  • せっかく作ったので、使う可能性のある人には広く告知したい。
  • 英語でREADME.mdを書いた。ContributorやUserの層が広がる。
  • CocoaPodsに登録すると公式サイトにREADME.mdの内容が紹介され、関連するサイトからツイートされる。
  • まず身内にFacebookなどで紹介して反応をいただきました。
  • facebookのグループ iOS Developers JAPANに投稿した。日本語。
  • Swift iOS Developmentに投稿した。英語。
  • Qiitaでライブラリを紹介した。日本語。
  • UI系ライブラリなので、CocoaControliOS Cookiesにも申請しました。

ぜひ使ってみてください