一度に1つしか選択できないように、切り替えボタンのカスタム実装を実装しようとしています。を使用してオブジェクトを初期化するという奇妙なエラーが発生しました[[ajdSwitchButton alloc] init]
。initでは、次のようにクラスプロパティを設定しますself.currentSelection = 2
。
問題はinit
、メソッドの最初の呼び出しとの間IBAction
で、値が0に変更されることです。理由がわかりません。関連するコードは次のとおりです。
ajdSwitchButton.h
#import <UIKit/UIKit.h>
@interface ajdSwitchButton : UIView
@property (nonatomic) NSInteger currentSelection;
// Button Outlets
@property (nonatomic, strong) IBOutlet UIButton *buttonOne;
@property (nonatomic, strong) IBOutlet UIButton *buttonTwo;
// Button Actions
- (IBAction)buttonPress:(id)sender;
- (IBAction)buttonPressTwo:(id)sender;
// Instance Methods
- (void)switchButtonState:(UIButton *)button;
@end
ajdSwitchButton.m
#import "ajdSwitchButton.h"
@implementation ajdSwitchButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
_currentSelection = 2;
}
return self;
}
// Handles button press actions for buttonOne
- (IBAction)buttonPress:(id)sender {
NSLog(@"%@", self);
// Y button pressed
if (self.currentSelection == 2) {
// No button is selected
// Highlight and select buttonOne
[self performSelector:@selector(switchButtonState:) withObject:self.buttonOne afterDelay:0.0];
} else if (self.currentSelection == 1) {
// No was previously selected
// Unselect NO and select YES
[self performSelector:@selector(switchButtonState:) withObject:self.buttonTwo afterDelay:0.0];
[self performSelector:@selector(switchButtonState:) withObject:self.buttonOne afterDelay:0.0];
} else {
// Y button already pressed
[self performSelector:@selector(switchButtonState:) withObject:self.buttonOne afterDelay:0.0];
}
self.currentSelection = 0;
}
- (IBAction)buttonPressTwo:(id)sender {
// N button pressed
NSLog(@"%i", self.currentSelection);
if (self.currentSelection == 2) {
// No button is selected
// Highlight and select buttonOne
[self performSelector:@selector(switchButtonState:) withObject:self.buttonTwo afterDelay:0.0];
} else if (self.currentSelection == 0) {
// Yes was previously selected
// Unselect YES and select NO
[self performSelector:@selector(switchButtonState:) withObject:self.buttonTwo afterDelay:0.0];
[self performSelector:@selector(switchButtonState:) withObject:self.buttonOne afterDelay:0.0];
} else {
// N button already pressed
[self performSelector:@selector(switchButtonState:) withObject:self.buttonTwo afterDelay:0.0];
}
self.currentSelection = 1;
}
// Switches the look and state of the button
- (void)switchButtonState:(UIButton *)button {
if (!button.selected) {
button.highlighted = YES;
button.selected = YES;
} else {
button.highlighted = NO;
button.selected = NO;
}
}
@end
ajdSwitchButton
のインスタンスを内のIBOutlet
ビューにリンクしますViewController
。どんな助けでも大歓迎です。
編集:メソッドが呼び出さinit
れた直後とすぐにオブジェクトのメモリ値をチェックするために、いくつかのNSLogを貼り付けました。IBAction
前後は次のとおりです。
<ajdSwitchButton: 0x746d2e0; frame = (0 0; 0 0); layer = <CALayer: 0x7472c40>>
<ajdSwitchButton: 0x7471b10; frame = (77 232; 180 83); autoresize = TM+BM; layer = <CALayer: 0x7471bf0>>