2017-02-14 14 views
0

私のアプリケーションの特定のスタイルで作成するボタンをカスタマイズできます。私はすべての設定で構成される新しいクラスを作成しようとしていました。新しいボタンを追加するたびに、クラスのメソッドを使用して新しいボタンをカスタマイズできます。Objective Cの既存のボタンをカスタマイズする

私はので、私は私が何か間違ったことをやってきたかもしれませんquessが、それは私がこれまで持っているもののイオスプログラミングに非常に新しいです:

私は設定

#import "CustomButton.h" 

@implementation CustomButton 

-(UIButton *) setButtonWithType{ 

    self.layer.cornerRadius = 25; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowOffset = CGSizeMake(1.5f, 1.5f); 
    self.layer.shadowOpacity = 1.0f; 
    self.layer.shadowRadius = 0.0f; 
    self.layer.masksToBounds = NO; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.bounds; 
    gradient.startPoint = CGPointMake(0.5, 0.5); 
    gradient.endPoint = CGPointMake(0.0, 0.5); 
    gradient.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor,(id)[UIColor colorWithRed:230/255.0 green:230/255.0 blue:230/255.0 alpha:1.0].CGColor, nil]; 
    gradient.cornerRadius = self.layer.cornerRadius; 
    [self.layer insertSublayer:gradient atIndex:0]; 

    return self; 
} 

@end 
を持つクラスを作成しました

ViewController.h

@interface ViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UIButton *button; 

@end 

ViewController.m

#import "ViewController.h" 
#import "CustomButton.h" 

@interface ViewController() 


@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CustomButton *btn = [[CustomButton alloc] init]; 


    self.button = [btn setButtonWithType]; 

//rest of the code 

どのようなアイデアを作成するにはどうすればいいですか? また、非常に異なるアプローチを使用する必要がありますか?

ありがとうございました!

+0

ニブ/ストーリーボードの権利は一切使用していませんか?あなたの新しく割り当てられたinit'dボタンにはフレームや何もありません。スーパービューに属しません:/ –

+0

いいえ、私はストーリーボードを使用しているので、ボタンは一般的な設定でロードされ、新しいものを適用しようとするとそれは動作しません... – Syngmaster

+1

あなたはUIBUttonのCUstomButtonクラスinteadのiboutletを宣言する必要があります! customButtonをself.buttonプロパティに割り当てる必要はありません。 –

答えて

1

あなたが成功(そこに多くの例)カテゴリーとしてこれを行うことを見つけることができます...

UIButton + ShadowRoundedGradient.h

#import <UIKit/UIKit.h> 

@interface UIButton (ShadowRoundedGradient) 

- (void) makeMe; 

@end 

UIButton + ShadowRoundedGradient.m

#import "UIButton+ShadowRoundedGradient.h" 

@implementation UIButton (ShadowRoundedGradient) 

- (void) makeMe { 

    self.layer.cornerRadius = 25; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowOffset = CGSizeMake(1.5f, 1.5f); 
    self.layer.shadowOpacity = 1.0f; 
    self.layer.shadowRadius = 0.0f; 
    self.layer.masksToBounds = NO; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.bounds; 
    gradient.startPoint = CGPointMake(0.5, 0.5); 
    gradient.endPoint = CGPointMake(0.0, 0.5); 
    gradient.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor,(id)[UIColor colorWithRed:230/255.0 green:230/255.0 blue:230/255.0 alpha:1.0].CGColor, nil]; 
    gradient.cornerRadius = self.layer.cornerRadius; 
    [self.layer insertSublayer:gradient atIndex:0]; 

} 

@end 

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

@property (weak, nonatomic) IBOutlet UIButton *button; 

} 

@end 

ViewController.m

#import "ViewController.h" 
#import "UIButton+ShadowRoundedGradient" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.button makeMe]; 

    //rest of the code 
} 
+0

ありがとう!それはまさに私が必要なものです!私はクラスとカテゴリーの間で自分自身を混乱させると思う。 Obj-C理論の要約を取得する必要があります:) – Syngmaster

関連する問題