2種類のボタンを生成する「DCButton」クラス

テキストボタンと画像ボタンをシンプルな記述で生成する「DCButton」クラスを作成しました。

下記よりサンプルとソースコードのダウンロードが行えます。

ダウンロード

使用方法

テキストボタンの取得

1
2
3
4
5
    UIButton *planeButton = [DCButton planeButton:CGRectMake(40, 140, 240, 36)
                                             text:@"Button"
                                         delegate:self
                                           action:@selector(buttonDidTap:)
                                              tag:0];

画像ボタンの取得

1
2
3
4
5
6
7
    UIButton *imageButton = [DCButton imageButton:CGRectMake(40, 200, 240, 36)
                                              img:[UIImage imageNamed:@"button.png"]
                                     isHighlighte:NO
                                           on_img:nil
                                         delegate:self
                                           action:@selector(buttonDidTap:)
                                              tag:1];

サンプルソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//ボタンのタイプ
enum {
    BUTTON_PLANE = 0,
    BUTTON_IMAGE = 1
};

- (void)viewDidLoad
{
    [super viewDidLoad];

    //プレーンボタンの作成
    UIButton *planeButton = [DCButton planeButton:CGRectMake(40, 140, 240, 36)
                                             text:@"Button"
                                         delegate:self
                                           action:@selector(buttonDidTap:)
                                              tag:BUTTON_PLANE];
    [self.view addSubview:planeButton];

    //イメージボタンの作成
    UIButton *imageButton = [DCButton imageButton:CGRectMake(40, 200, 240, 36)
                                              img:[UIImage imageNamed:@"button.png"]
                                     isHighlighte:NO
                                           on_img:nil
                                         delegate:self
                                           action:@selector(buttonDidTap:)
                                              tag:BUTTON_IMAGE];
    [self.view addSubview:imageButton];
}


//ボタンのタップイベント
- (void)buttonDidTap:(UIButton *)button
{
    //タグを格納
    NSInteger eventType = button.tag;

    //タグによって振り分け処理
    if (eventType == BUTTON_PLANE) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                                                        message:@"planeButtonDidTap"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
    } else if (eventType == BUTTON_IMAGE) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                                                        message:@"imageButtonDidTap"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
    }
}

ソースコード

DCButton.h

1
2
3
4
5
6
7
8
9
#import <UIKit/UIKit.h>

@interface DCButton : UIButton

#pragma mark - public method
+ (UIButton *)planeButton:(CGRect)frame text:(NSString *)text delegate:(id)delegate action:(SEL)action tag:(NSInteger)tag;
+ (UIButton *)imageButton:(CGRect)frame img:(UIImage *)img isHighlighte:(BOOL)isHighlighte on_img:(UIImage *)on_img delegate:(id)delegate action:(SEL)action tag:(NSInteger)tag;

@end

DCButton.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#import "DCButton.h"

@implementation DCButton

// 通常のボタン
+ (UIButton *)planeButton:(CGRect)frame text:(NSString *)text delegate:(id)delegate action:(SEL)action tag:(NSInteger)tag
{
    // ボタン作成
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setTitle:text forState:UIControlStateNormal];

    // ボタンのフレームを指定
    [button sizeToFit];
    button.frame = frame;

    // 画面が変わってもボタンの位置を自動調整
    button.autoresizingMask =
        UIViewAutoresizingFlexibleWidth |
        UIViewAutoresizingFlexibleHeight |
        UIViewAutoresizingFlexibleLeftMargin |
        UIViewAutoresizingFlexibleRightMargin |
        UIViewAutoresizingFlexibleTopMargin |
        UIViewAutoresizingFlexibleBottomMargin;

    // ボタンのタグを指定
    button.tag = tag;

    // ボタンをタップした時に指定のメソッドを呼ぶ
    [button addTarget:delegate
               action:action
     forControlEvents:UIControlEventTouchUpInside];

    return (button);
}

// 画像ボタン
+ (UIButton *)imageButton:(CGRect)frame img:(UIImage *)img isHighlighte:(BOOL)isHighlighte on_img:(UIImage *)on_img delegate:(id)delegate action:(SEL)action tag:(NSInteger)tag
{
    // ボタン作成
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    // ボタンのフレームを指定
  [button setFrame:frame];

    // ボタンの画像を指定
  [button setImage:img forState:UIControlStateNormal];
  button.adjustsImageWhenDisabled = NO;
    if (!isHighlighte) {
        button.showsTouchWhenHighlighted = NO;
        button.adjustsImageWhenHighlighted = NO;
    } else if(on_img != nil || ![on_img isEqual:[NSNull null]]) {
        [button setImage:on_img forState:UIControlStateHighlighted];
    }

    // ボタンのタグを指定
  [button setTag:tag];

    // ボタンをタップした時に指定のメソッドを呼ぶ
  [button addTarget:delegate
               action:action
     forControlEvents:UIControlEventTouchUpInside];

  return (button);
}

@end

お薦めの参考書

絶対に挫折しない iPhoneアプリ開発「超」入門 増補改訂第4版
Swiftについて知りたい開発者の方のみならず、プログラミング未経験者の方にも参考になる内容になっています。Swiftの基礎を一から丁寧に解説されており、この書籍があればネットで調べる手間をかなり省くことができると思います。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • アート壁紙HD(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)