*

確認ダイアログ付きチェックボックス(Checkbox)

公開日: : 最終更新日:2014/07/10 iOS ,

Checkbox
図のようなチェックボックスとアラートの組合せを実装しようとした際にiOSには外観などを簡単にカスタマイズできる標準のチェックボックがないことを知りました。チェックボックスと同様の機能をもつUISwitchはありますが、外観のカスタマイズが困難で色の変更程度しかできません。
一方でUIButtonは外観を自由に変えることができるので、UIButtonの動作をカスタマイズしてチェックボックスにしました。

チェックボックス(Checkbox)の実装

@implementation MHCheckbox

- (void)setUserInteractionEnabled:(BOOL)userInteractionEnabled {
    [super setUserInteractionEnabled:userInteractionEnabled];
    if (userInteractionEnabled) {
        [self addTarget:self action:@selector(checkboxTapped:) forControlEvents:UIControlEventTouchUpInside];
    } else {
        [self removeTarget:self action:@selector(checkboxTapped:) forControlEvents:UIControlEventTouchUpInside];
    }
}

- (void)setChecked:(BOOL)checked {
    self.selected = checked;
}

- (BOOL)isChecked {
    return self.selected;
}

- (void)toggleChecked {
    self.selected = !self.selected;
}

- (void)setImage:(UIImage *)normal checked:(UIImage *)checked disabled:(UIImage *)disabled {
    [self setBackgroundImage:normal forState:UIControlStateNormal];
    [self setBackgroundImage:normal forState:UIControlStateHighlighted];
    [self setBackgroundImage:checked forState:UIControlStateSelected];
    [self setBackgroundImage:disabled forState:UIControlStateDisabled];
}

#pragma mark - private method
- (void)checkboxTapped:(MHCheckbox *)button {
    if ([_delegate respondsToSelector:@selector(checkboxShouldChange:checked:)]) {
        if (![_delegate checkboxShouldChange:self checked:!button.selected]) {
            return;
        }
    }
    button.selected = !button.selected;
    [button sendActionsForControlEvents:UIControlEventValueChanged];
}

@end


ポイント

  • UIControlStateHighlightedにNormalの画像を設定
  • タップされた時にselectedプロパティを反転させ、sendActionsForControlEventsを呼びだす

    プログラム的に値を変更した場合は、ValueChangedが発生しないので意図的に呼びだす必要があります。

    サンプル

    Could not inspect the application package.(おまけ)

    Could not inspect
    実装しているときに図のようなエラーがでて困りました。
    ネットで調べているとこちらの記事を見つけました。

    この記事の方法でも解消されず、私の場合、どうやら図のようにプロジェクトに[Create folder references for any added folders]で[Resources]フォルダを追加したことがきっかけでした。追加したフォルダを削除して、Organizerからアプリの[Derived Data]を削除すると出なくなりました。

  • Sponsored Link

    関連記事

    2015_ec1.png

    イーモン プレビュー動画

    動画2作目、お正月っぽく

    記事を読む

    iOS7向けアプリアイコンを一括変換

    iOSがiOS7にバージョンアップされ、アプリに必要なアイコン画像のサイズがさらに増えました(

    記事を読む

    5017d1a195d95dfed9f60e9fd5d82c13.png

    苦手な英語の発音を真面目に考えてみた

    最近、英語の発音に真面目に取り組んでます。 これまで読み書きが中心で、リスニングやスピーキン

    記事を読む

    teach_s.png

    English Monsters1.0がAppStoreの審査通過

    English Monsterが遂にAppStoreで公開されました。 一度AppStor

    記事を読む

    ace.png

    イーモン v2.2審査

    v2.2を審査に出しました! イーモンxエースクラウンの特別クエストが追加されます!

    記事を読む

    sola.png

    アプリからFormDataを送信する

    HTMLのformタグを使うとHTTPリクエストにkey=valueの形式で任意のデータを付加して送

    記事を読む

    ace.png

    イーモンxエースクラウン「Aの塔」決定

    あの英和辞典エースクラウンがイーモンに登場します! エースクラウンで取り上げられている会

    記事を読む

    blog.png

    cocos2d-x v2.2からv3.3rc0 その2

    イーモンを鋭意更新中です。 アイキャッチは魔法使いの高ランク装備グラです。 coc

    記事を読む

    kii1.png

    Kii Cloudオブジェクトエディタ

    現在作成しているゲームで使うMBaasとしてKii Cloudを検討しています。 和製のMBa

    記事を読む

    cocos2dx_portrait.png

    Macでcocos2dxをiOSとAndroid向けにビルド

    前回Androidの開発環境をセットアップでAndroidの開発環境が準備をしました。 今

    記事を読む

    Sponsored Link

    Message

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    Sponsored Link

    • 発音辞書イーモン
    • English Monsters
    • sLog(時間管理アプリ)
    • 生粋のC++プログラマーです。 最近は、Objective-Cやxcode、cocos2d-xなどを学びながらiPhoneアプリを開発しています。

    Google+ Google
    PAGE TOP ↑