Category: objective-c

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

    iOSのNotificationでは、アプリケーションアイコンの右肩に数字(バッジ)を表示することができるけど、その数字を消去するときにちょっとした落とし穴があるのでメモ。まずはUIApplicationオブジェクトを取得して直接バッジを設定する場合。

    (1)アプリケーションオブジェクト(UIApplication)を通じて直接、バッジ設定する場合
    [UIApplication sharedApplication].applicationIconBadgeNumber = badgeNumber;

    この場合は、badgeNumber(NSInteger)の数字が正の数であれば、バッジ数字が表示、ゼロであればバッジアイコンは消去される。
    ではローカル通知を通じた場合はどうなるか。

    (2)ローカル通知オブジェクト(UILocalNotification)を通じたバッジ設定の場合。ちなみにローカル通知はiOS4から利用可能
    NSInteger badgeNumber = 1;
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:30];//30秒後
    notification.alertBody = @”ローカル通知メッセージ;
    notification.applicationIconBadgeNumber = badgeNumber;
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    [notification release];

    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 ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).bounces = NO;

    要はUIWebViewsのsubViewsで取りだした子要素の一覧からUIScrollViewのインスタンスを取り出し、
    それのbouncesプロパティを無効にする。これがうまくスクロールをdisableにできれば、気兼ねなくネイティブUIとのハイブリッドが採用できそう。

    まだ実際には試してないけど後で試してみる予定。

  • UIWebViewでloadHTMLStringするときの要点まとめ

    iOSアプリで適宜、UIの一部分をUIWebViewにしてHTMLで処理するようにすると開発効率が劇的に向上するということは間々あって、その中でもこのエントリではUIWebViewを使ってローカルでHTMLをloadHTMLStringするときの注意点のメモ。

    (more…)

  • EKEvent howto: 設定できる項目

    Event Kit Programming Guideからのメモ。

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

    以上を設定した上で、EventStoreのsaveEvent:span:errorインスタンスメソッドを呼んであげる。