objective-c

iOS Notification(通知)バッジナンバー表示の要点だけ

iOSのNotificationでは、アプリケーションアイコンの右肩に数字(バッジ)を表示することができるけど、その数字を消去するときにちょっとした落とし穴があるのでメモ。まずはUIApplicationオブジェクトを取得して直接バッジを設定する場合。 (1)アプリケーションオブジェクト(UIApplication)を通じて直接、バッジ設定する場合 .applicationIconBadgeNumber = badgeNumber; この場合は、badgeNumber(NSInteger)の数字が正の数であれば、バッジ数字が表示、ゼロであればバッジアイコンは消去される。 ではローカル通知を通じた場合はどうなるか。 (2)ローカル通知オブジェクト(UILocalNotification)を通じたバッジ設定の場合。ちなみにローカル通知はiOS4から利用可能 NSInteger badgeNumber = 1; UILocalNotification *notification = init]; notification.fireDate = ;//30秒後 notification.alertBody = @”ローカル通知メッセージ“; notification.applicationIconBadgeNumber = badgeNumber; scheduleLocalNotification:notification]; ; badgeNumberが正の数であれば、通知時に該当アプリのバッジにその数字が設定される。しかしゼロの場合は、直前のバッジ数字がそのまま残る。消去したい場合は、applicationBadgeNumberに負の数を設定すれば良い。ちなみに(1)のパターンのときもゼロでなく負の数を与えてもバッジは消える。

UIWebViewのバウンスアニメを無効にする要点だけ

アプリ内でUIWebViewを使うときに困るのが、タッチ操作でスクロールできてしまうこと。 ネイティブUIにUIWebViewが入りこんでいることが分かって、UIの統一性が失われてしまう。 WebViewがドラッグ動作で範囲外までスクロールできる「バウンス動作」が無効にできれば良さそうだけど、、ということで調べたら、出てきたのでメモ。 http://stackoverflow.com/questions/500761/stop-uiwebview-from-bouncing-vertically for (id subview in webView.subviews) if ( isSubclassOfClass: ]) ((UIScrollView *)subview).bounces = NO; 要はUIWebViewsのsubViewsで取りだした子要素の一覧からUIScrollViewのインスタンスを取り出し、 それのbouncesプロパティを無効にする。これがうまくスクロールをdisableにできれば、気兼ねなくネイティブUIとのハイブリッドが採用できそう。 まだ実際には試してないけど後で試してみる予定。

EKEvent howto: 設定できる項目

Event Kit Programming Guideからのメモ。 プログラムからEKEventを作成するときに設定できる項目は以下。 ・タイトル ・開始および終了日時 ・カレンダー:新規作成は不可で、既存のもののみ。  カレンダーはEKEventStore.calendarsでEKCalendarのNSArrayが取得できる。もしくはEKEventStoreインスタンスのdefaultCalendarForNewEnents。 ・繰り返し設定。EKRecurrenceRule。 ・アラーム:EKEventにaddAlarm:(EKAlarm *)alarmできる。 以上を設定した上で、EventStoreのsaveEvent:span:errorインスタンスメソッドを呼んであげる。