ObjecTips

Swift & Objective-C で iOS とか macOS とか

Objective-C

UITextView で「リッチテキストとしてペースト」pasteAsRichText を実装する その2

前回 前回の結果を踏まえて copy: メソッドもオーバーライドして挙動をカスタマイズする事にする。 簡単なのは copy: メソッドの super の挙動を呼び出してペーストボードの中身を作ってから自前で追加したいものを加える方法。 実装 - (void)copy:(id)sende…

UITextView で「リッチテキストとしてペースト」pasteAsRichText を実装する

OS Xでの挙動 OS Xの NSTextView には - (void)paste:(id)sender; - (void)pasteAsPlainText:(id)sender; - (void)pasteAsRichText:(id)sender; これらのメソッドがあって、システムのペーストの挙動をそのまま使う事もできるしプレーンテキストやリッチテキ…

AppleScript の JavaScript for Automation で plist ファイルを作成する

上記の記事ではJSONファイルの書き出し保存を行った。 iOS でデータを扱う際には JSON より plist の方が読み込みが簡単なので plist 形式でのファイル保存もさらっておく。 plist の書き出しは NSArray or NSDictionary を writeToFile:atomically: で書き…

NSString が数字のみで構成されているかを判定する その2

以前 NSCharacterSet の decimalDigitCharacterSet メソッドを使って文字列が数字のみを含んでいるかを調べるコードを書いた。 ここに少しコードを追加して文字列がローカライズとフォーマットされた数字表記のみを含んでいるかどうかを調べるコードにする。…

コピー可能な UILabel

編集不可な文字列を UILabel で表示させつつユーザにコピー操作だけはさせたいという事があったので実装を試みてみた。 コピーの方法は UITextView や UITextField でコピー操作を行う時と同様にポップアップのメニューを表示するようにする。 メニューは UI…

OSType, FourCharCode から NSString への変換

いろいろデバッグしていて OSType や FourCharCode を扱う事があるので備忘。 OS Xだと Foundation.framework に NSFileTypeForHFSTypeCode という便利な関数が用意されている。 この関数はシングルクォーテーションで囲われた文字列を生成する。 OSType typ…

ナビゲーションバーを透明にする transparent UINavigationBar

サンプルとして UINavigationController の rootViewController に UITableViewController を設定したものを使う。 UINavigationItem に適当にボタンを設定して UITableView の tableViewHeader に UIImageView を aspectToFill で入れて画像を設定。 Storyb…

AppleScript の JavaScript for Automation で Excel から JSON ファイルを作成する

これまでの記事 AppleScript の JavaScript for Automation で Excel のセルの値を取得する - ObjecTips AppleScript の JavaScript for Automation でテキストをファイルに保存する - ObjecTips AppleScript の JavaScript for Automation でテキストをファ…

AppleScript の JavaScript for Automation でテキストをファイルに保存する Objective-C Bridge編

前回の記事 AppleScript の JavaScript for Automation でテキストをファイルに保存する - ObjecTips 前回は AppleScript の StandardAdditions を使ってテキストファイルの書き出し保存を行ったが、 まずどんな関数があるのか、そして関数の引数や実行時の…

AVAudioPlayer と AVPlayer の初期化時の注意点

AVAudioPlayer には NSURL で初期化を行う以下のメソッドがある。 - (instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; AVPlayer にも NSURL で初期化を行う以下のメソッドがある。 + (id)playerWithURL:(NSURL *)URL; - (inst…

AVAudioRecorder deleteRecording でクラッシュ

AVAudioRecorder を生成後、録音を開始しないまま deleteRecording メソッドを呼ぶとクラッシュしたりエラーが出たりする。 以下のコードで試せる。 iOS 8.2, iOS 8.3 ではクラッシュ iOS 9.0 β ではコンソールに以下のエラーが出たがクラッシュはしなかった…

CITextFeature の iOS 9β4 での変更点

iOS 9で追加されたテキスト領域の矩形を検出できる CITextFeature に iOS 9 β4 で subFeatures というプロパティが追加された。 @property (readonly) NSArray *subFeatures; この subFeatures プロパティは検出した領域内に含まれる各文字の領域を示す CITe…

Photos.framework で自撮り(selfie)画像の一覧を取得する

iOS 9 β3で PHAssetCollectionSubtypeSmartAlbumSelfPortraits NS_AVAILABLE_IOS(9_0) = 210 が追加された。 以前紹介したスクリーンショット画像の一覧取得は Photos.framework でスクリーンショット画像の一覧を取得する - ObjecTips PHAssetMediaSubtype …

viewWillDisappear: では super をいつ呼ぶべきか

- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // some implements } と - (void)viewWillDisappear:(BOOL)animated { // some implements [super viewWillDisappear:animated]; } どちらが良いの?という議題 Appleのド…

UITableViewCell で Auto Layout + UITextView を使う際の Tips

iOS 8の self-sizing cell で自動で高さを調整してくれるように実装したところちょっと問題が。 まずセルのレイアウトは以下 上に UILabel, 下に UITextView を配置してラベルとテキストビューの間は0px ラベルとテキストビューそれぞれのセルの contentView…

UITableViewCell のメニューの表示位置をカスタマイズする

まず UITableView のセルのメニュー表示の実装方法はこちら UITableView のセル選択時にメニューを表示する - ObjecTips 前回の方法では UITableViewDelegate を使ってメニュー表示をする時と同じ標準的な位置にメニューが表示される。 セルへのメニューの表…

UITableViewCell 選択時にメニューを表示する

前回は UITableViewDelegate を使って簡単にメニュー表示をする方法について書いた。 UITableView のセルの Copy Paste メニューを表示する - ObjecTips この方法はセルを長押しした時にメニューを表示する事ができるが、セルをタップして選択したらすぐにメ…

UITableViewCell で Copy Paste メニューを表示する

UITableView にはセルの Copy Paste メニューを簡単に実装できる delegate メソッドが用意されている。 // Copy/Paste. All three methods must be implemented by the delegate. - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPa…

デフォルトの EKCalendar について

デフォルトの EKSource iOS にはデフォルトで2つのデフォルトのソース EKSource が用意されている。 1つはローカルのカレンダー(iCloud同期を設定しない場合)。 もう1つは EventKit からはアクセスできない誕生日用のカレンダー。 このあたりの詳しい話は…

Photos.framework でスクリーンショット画像の一覧を取得する

iOS 9 β2で PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2) が追加された。 これを使えば写真ライブラリからスクリーンショット画像のみを取得したり、逆にスクリーンショットを排除した画像一覧を取得する事ができる。 コードは以…

NSUserDefaults の変更通知を受け取る

NSUserDefaults には NSUserDefaultsDidChangeNotification という通知が用意されていて変更通知を受け取る事ができる。 この通知は userInfo が nil になっていて、何が変更されたのか変更の詳細を知る事ができない。 NSUserDefaults の何のキーが変更され…

dispatch_block_t

dispatch/object.h に以下のような定義がある。 typedef void (^dispatch_block_t)(void); 自前の実装の中で - (void)test { void (^blockName)(void) = ^{ }; } @interface MyObject : NSObject @property (nonatomic, copy) void (^blockName)(void); @end…

ARC で retain count を調べる

ARC環境では retain count を取得する retainCountメソッドと手動で retain release を行う retain release メソッドが使えなくなった。 でもいつどこでオブジェクトが保持され解放されているかオブジェクトの retain count を調査したい時がある。 そういう…

WebView の UserAgent を取得設定する iOS 9対応

UserAgent の取得 UIWebView では stringByEvaluatingJavaScriptFromString: メソッドで JavaScript を実行して UserAgent を取得できる。 iOS 8以降の WKWebView では evaluateJavaScript:completionHandler: メソッドで JavaScript を実行して UserAgent …

デフォルトの EKSource について その2

前回の記事で、デフォルトでは2つの EKSource が存在する事について書いた。 デフォルトの EKSource について - ObjecTips iCloud のアカウントを設定するとさらに EKSourceTypeCalDAV EKSourceTypeSubscribed の2つのソースが追加される。 一覧は以下 title…

リマインダーの優先順位 その2

少し前にリマインダーの priority プロパティについて書いた。 リマインダーの優先順位 - ObjecTips その後いろいろと調べていて OS X の方の EventKit/EKTypes.h を見ていたら以下のように priority の定数がしっかりと定義されていた。 typedef enum : NSU…

アプリ全体を Dynamic Type に対応させる

アプリを Dynamic Type に対応させようと思って実装してみた。 IBでフォント指定可能なUI まずIB上で設置できるUIをいくつか配置する。 UILabel UIButton UITextField UITextView はIB上でフォントの設定ができるので Dynamic Type に対応したフォントを設定…

デフォルトの EKSource について

EKSource 上記コードでカレンダーへのプライバシーアクセスとリマインダーへのプライバシーアクセスを表示して全ての EKSource の配列を取得できる。 このソースは iCloud や CalDav を設定する事で増減するが、デフォルトでは2つのソースが用意されている。…

リマインダーの優先順位

EKReminder の priority プロパティ @property(nonatomic) NSInteger priority; なぜか現時点でまだドキュメントに記載が無いが、ヘッダファイルには定義が載っている。 ヘッダファイルのコメントによれば priority の値は最高が1、最小が9になっていてRFC 5…

Share Extension の NavigationItem をカスタマイズする

Share Extension のテンプレートで作成される SLComposeServiceViewController のサブクラスを自前のコントローラクラスとして、コード内では self として説明する。 Share Extension のデフォルトの表示が以下 self.title = @"Title"; これで NavigationBar…