*

確認ダイアログ付きチェックボックス(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

    関連記事

    teach_s.png

    [eMon] English Monstersレビュー申請中

    先日、新しいiOSアプリを審査に出しました。 English Monsters(略してeM

    記事を読む

    tmp.png

    最近のAppStore審査【iOS8】

    紹介動画でリジェクト!?(App Preview) AppStoreのアプリ紹介にに機能や

    記事を読む

    ace.png

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

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

    記事を読む

    emon.png

    【イーモン】v1.5リリース

    やっとv1.5リリースできました。 継続的にプレイを続けてもらえるように ゲームのバランス

    記事を読む

    statusbar2.png

    ステータスバーとナビゲーションバーを含まない領域を取得する

    iOS7からUIViewControllerのview.boundsはステータスバーやナビゲーシ

    記事を読む

    internet_share.png

    インターネット共有のステータスバーを表示させない

    私の作っているアプリではcocos2d-xでCCEAGLViewを表示させるUIViewCo

    記事を読む

    no image

    Renderer::visitRenderQueueで落ちる場合

    Cocos2d-x v3にしてから描画で突然落ちる場合があり、 原因をたどっていくと、Re

    記事を読む

    teach_s.png

    English Monsters1.0がAppStoreの審査通過

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

    記事を読む

    sample.png

    cocos2dxでhttp通信のprogressを表示する

    cocos2d-xでは、ダウンロードの進捗を取得するインターフェイスが用意されていないような

    記事を読む

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

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

    記事を読む

    Sponsored Link

    Message

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

    Sponsored Link

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

    Google+ Google
    PAGE TOP ↑