2011-12-16 13 views
0

私は2つのボタンで動作しないものを見つけることができません。UIButtonが毎回意図したとおりに動作しない

(「従来型」または「VR」が含まれている場合)ボタンは意図したとおりに動作します。変数に他の値がある場合、ボタンは何も行いません。メソッドは依然として呼び出され、ボタンメソッドのifステートメントに入りますが、プロパティは変更されません。そのボタンのようにUIButtonは接続されていません。変数に "従来型"または "VR"文字列が含まれていれば完璧に動作します。

グッド

plantingEventData.seedingMethod = @"conventional" or @"VR" 

悪い私は2つの選択されるいずれか一つまたはどちら用に設定されているだろうボタン作成

plantingEventData.seedingMetod = any other value 

UIButton *conventionalSeedingButton = [UIButton new]; 
conventionalSeedingButton.frame = CGRectMake(200, ((i * 40) + 143), 20, 20); 
conventionalSeedingButton.tag = 1; 
[conventionalSeedingButton addTarget:self action:@selector(conventionalSeedingMethodBtn:) forControlEvents:UIControlEventTouchUpInside]; 
if ([plantingEventData.seedingMethod isEqualToString:@"conventional"]) 
{ 
    NSLog(@"convention button is set to true"); 
    [conventionalSeedingButton setImage:[UIImage imageNamed:@"radio-btn-selected.png"] forState:UIControlStateNormal]; 
    conventionalSeedingButton.selected = TRUE; 
} 
else 
{ 
    NSLog(@"convention button is set to false"); 

    [conventionalSeedingButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
    conventionalSeedingButton.selected = FALSE; 
} 

UIButton *VRSeedingButton = [UIButton new]; 
VRSeedingButton.frame = CGRectMake(200, ((i * 40) + 143), 20, 20); 
VRSeedingButton.tag = 2; 
[VRSeedingButton addTarget:self action:@selector(VRSeedingMethodBtn:) forControlEvents:UIControlEventTouchUpInside]; 
[VRSeedingButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
if ([plantingEventData.seedingMethod isEqualToString:@"VR"]) 
{ 
    NSLog(@"VR button is set to true"); 

    [VRSeedingButton setImage:[UIImage imageNamed:@"radio-btn-selected.png"] forState:UIControlStateNormal]; 
    VRSeedingButton.selected = TRUE; 
} 
else 
{ 
    NSLog(@"VR button is set to false"); 

    [VRSeedingButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
    VRSeedingButton.selected = FALSE; 
} 

ボタンが呼び出すメソッドを:

-(IBAction)conventionalSeedingMethodBtn:(id)sender 
{   
    NSLog(@"self.conventionalSeedingMethodButton.selected: %@", self.conventionalSeedingMethodButton.selected ? @"YES" : @"NO"); 
    if (self.conventionalSeedingMethodButton.selected) 
    { 
     NSLog(@"switching from true to false"); 
     [self.conventionalSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
     self.conventionalSeedingMethodButton.selected = FALSE; 
    } 
    else 
    { 
     NSLog(@"switching from false to true"); 
     [self.conventionalSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn-selected.png"] forState:UIControlStateNormal]; 
     self.conventionalSeedingMethodButton.selected = TRUE; 
    } 

    [self.VRSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
    self.VRSeedingMethodButton.selected = FALSE; 

} 

-(IBAction)VRSeedingMethodBtn:(id)sender 
{   
    NSLog(@"self.VRSeedingMethodButton.selected: %@", self.VRSeedingMethodButton.selected ? @"YES" : @"NO"); 

    if (self.VRSeedingMethodButton.selected) 
    { 
     NSLog(@"switching from true to false"); 
     [self.VRSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
     self.VRSeedingMethodButton.selected = FALSE; 
    } 
    else 
    { 
     NSLog(@"switching from false to true"); 
     [self.VRSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn-selected.png"] forState:UIControlStateNormal]; 
     self.VRSeedingMethodButton.selected = TRUE; 
    } 

    [self.conventionalSeedingMethodButton setImage:[UIImage imageNamed:@"radio-btn.png"] forState:UIControlStateNormal]; 
    conventionalSeedingMethodButton.selected = FALSE; 
} 

私は困惑しています=?

答えて

0

コードはちょっと混乱します。 Interface Builderで定義されたものと、プログラムで作成したものが混在しているようです。

あなたの意図は、IBを使用する場合:

  1. が新しいボタンをプログラムで作成し、IBボタンが正しく設定されていることを確認しないでください。プロパティを変更または設定する場合は、ボタンをviewDidLoadに設定できます。

あなたの意図が作成/プログラムでボタンを設定する場合:あなたのボタンがビューに追加されていない

  1. 。これは、あなたのアプリで見ているボタンがどこかに追加されていなければならないことを意味します(おそらくIB)。

  2. ボタンはiVarsに割り当てられていません。これは問題ありませんが、イベントハンドラのiVarsを参照しています。 iVarsがない場合は、タグプロパティを使用してボタンを取得します。

+0

私は問題が何であるかを理解しました。プログラムでボタンを作成し、ビューに追加します。私はビューの約Nを作成します。私は間違ったビューのボタンをself.VRSeedingMethodButton&self.conventionalSeedingMethodButtonにリンクしています。コードは間違っているViewのボタンを変更するだけで動作します。私はコードを修正する必要があります。 – Padin215

関連する問題