読者です 読者をやめる 読者になる 読者になる

そーす

福岡在住のプログラマ

iOSのみ、ModalとAlertを同時に使うとModalが消えないバグがある

issue上がってます github.com 再現方法 例えば通信処理中にインジケータ(くるくるするやつ)を出して、通信終わったらインジケータ消してレスポンスに応じてダイアログでユーザに通知したいとかあるじゃないですか。 このインジケータの表示にModalを使っ…

ReactNative雑感

最近自社のアプリ(iOS,Swift/Android, Kotlin)をReactNative化しているので使ってみた雑感など。 導入のきっかけ 自社アプリのiOS(Swift)とAndroid(Kotlin)は私が一人で作って運用しています。 なんで一人かというと社内でアプリをかけるのは私しかいない…

UIScrollViewは基本的にUIStackViewを内包していいのでは

iOS8を切れる状況なら、ですが。 class StackScrollView: UIScrollView { private(set) lazy var stack: UIStackView = { let stack = UIStackView() stack.axis = .vertical stack.alignment = .center return stack }() override init(frame: CGRect) { su…

文章中の任意のテキストをクリック可能にする

UITextFieldを使う というかUITextFieldじゃないとクリックイベントが発火しないようです。 UILabelとかUITextViewはだめみたいです。 クリック可能な部分のテキストのスタイル定義 UITextFieldのlinkTextAttributesプロパティにスタイルをセットします。 た…

Statusbarのスタイルを変更する

LaunchScreenとここのViewControllerごとに変更しなければならないようです。 LaunchScreenの変更 Info.plistにStatus bar styleを追加します。 ViewControllerごとの変更 UIViewControllerのpreferredStatusBarStyleプロパティをオーバーライドしましょう o…

キーボードを閉じるExtension

毎回めんどくさいので extension UIView { func hideKeyboard() -> Bool { if isFirstResponder() { resignFirstResponder() return true } else { return subviews.map{$0.hideKeyboard()}.filter{$0}.first ?? false } } } キーボードって1つしか出ない……

AVAuthorizationStatusがNotDeterminedでもAVCaptureDevice.requestAccessForMediaTypeでダイアログが出ない場合の対処

半日ハマった… info.plistのBundle display nameが空の場合に起こります。 なんのエラーも吐かないので全然わからなかった…

Enumの総数を返すextension

UICollectionViewで見た目が違うものに関してはSectionを使ってCellを切り替えたしするわけですが、私はそのSectionの種類をEnumで定義して使ってます。 その時にnumberOfSectionsInCollectionViewでセクションの総数を返す必要があるのですが、Enumの総数を…

表示されているViewControllerを取得する

saburesan.hatenablog.com この記事、ミスが有りました。表示されているViewControllerの取得の部分の実装が不十分でした。 こちらが新しい方法です。 UIViewControllerExtention.swift extension UIViewController { var currentTopViewController: UIViewC…

UICollectionViewで最下部での追加読み込みを実装する

アプリの仕様で * UICollectionViewの最下部で追加読み込みをする * 読み込みの際に最下部でインジケータを表示する * 追加がない場合はインジケータを消す という仕様、あるあるですよね。 方法はいくつかあるのですが、私が一番しっくりきた実装を載せます…

iOSエミュレータでcould not build Objective-C moduleと出た時の対処法

iOS

いきなりエミュレータで実行しようとした時に 「RxCocoa.h not found」 「could not build Objective-C module」 とでてビルド失敗しまくったので対処法。 エミュレータをアクティブにした状態でツールバーの Window->Projects->対象のプロジェクトDerived D…

El Capitan Cocoapodsがインストール/アップデートできない問題に対処する

qiita.com これです。 書いてある方法でも対処可能なのですが、おそらくrbenvなどで対処したほうがいいのではと個人的に思っております。 なぜインストールできなくなったのか OS X 10.11 El Capitanからrootlessというセキュリティ機能が追加されたようで、…

UITableViewCellの再利用するIDの管理を考える

すべてのCellをUITableViewCellのサブクラスで実装するときの話です。 UITableViewでCellの再利用をするときって以下の様な感じですよね。 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewC…

UITabBarに独自ボタンを追加する

TabにタブUITabBarItemじゃないViewを追加したいってことありますよね。 ↓のような Before After 実装 実装は簡単です。 UITabBarはUIViewのサブラクスでそれぞれのタブも単なるViewですので、リサイズして再配置すればいいだけです。 func relayoutTabView(…

コードからUITabBarControllerを作成

コードからUITabBarControlelr生成するときに少し躓いたので ダメな実装 convenience init() { self.init(nibName: nil, bundle: nil) homeViewController = HomeViewController() searchViewController = SearchViewController() homeViewController.tabBar…

16進数でColorリソースを管理する

saburesan.hatenablog.com 以前、R.Swiftを使ったリソース管理について少し書きました。 記事ではテキストのローカライズや画像の読み込みしか書いてないですが、他にもたくさん使えます 以下参照 github.com しかし、R.Swiftではカラーリソースの管理が~/Li…

SnapKitでAutoLayoutを簡単に書く

Storyboard使わない派なので、コードでAutoLayoutの制約を書くのですがすごくめんどくさいです。 例えば、self.viewの画面上部にnavigationViewというナビゲーションバーっぽいViewを設定したいときは self.view.addConstraints([ NSLayoutConstraint( item:…

R.swiftでリソース関連のハードコーディングを無くす

AndroidをやったあとにiOSをやると「ここ!使いにくいぃぃいい!!」って思う所が結構あります。 「画像、テキストなどのリソースアクセスがファイル名をハードコーディングする必要がある」 これです。 コンパイル時にエラーが検出できず、実際に実行して表…

UIWindowに背景を追加する

背景を共通でViewControllerだけ変えたい状況があったので。 AppDelegate.swift func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window = UIWindow(frame: UIScreen.mainSc…

iOSのLocalizable.stringsをプロパティアクセスで使えるようにしたい

iOSのテキストのローカライズって Localizable.strings "hello_world" = "Hello, world!" var helloWorld = NSLocalizedString("hello_world", comment: "") ってやると思うんですが、これkeyをタイポしても実行してView見てみないと気づかないし、ハードコ…

「追記あり」最前面のViewControllerにForeground/Backgroundのイベントを通知する

【追記】 最前面の取得方法にミスあったのでこっちを参照 saburesan.hatenablog.com AndroidやってたのでiOSのviewDidAppearとAndroidのonResumeっておんなじなのかと思ってたのですが、どうやら全然違うらしくちょっとハマりました。 ネットで調べるとNotif…

Fuse Sketchからインポートする

今回はSketchからインポートしてアプリを作成します。 Fuseプロジェクト作成 先にプロジェクトを作っておく必要があります % fuse create app SketchSample Sketchのプロジェクトを作成 今回はサンプルで以下のようなアプリのデザインっぽいのを作りました。…

Fuse インストールからAndroid実機リアルタイムプレビューまで

最近知ったワンソースでiOS,Androidのアプリが作れるツール「Fuse」 なんとSketchから直接インポートでアプリが出来るというかなり良さ気なツールです!! Sketchの変更をリアルタイムで実機プレビューが出来るらしい。。。素晴らしい。 ってことで導入 イン…