2011-01-10 10 views
1

謝罪これは初心者の質問であれば、オンラインで調べてみると簡単な答えが見つかりませんでした。IBAction内のifを使用する際に問題が発生する

私のiPhoneアプリにフィールド(「googlemap」)が埋め込まれていないと、ナビゲーションバーのボタンが消えるようにしようとしています。 if文であると考えて、次のコードを使用しました。その結果、ボタンの機能がすべて失われ(別のビューが呼び出されます)、消えません。

-(IBAction)btnMapM 
{ 
if (googlemap != nil) 
{ 

LocationInfo *ObjLocInfo = [self.LocationInfoArr objectAtIndex:0]; 
LocationMap *ObjLocationMap = [[LocationMap alloc] initWithNibName:@"LocationMap" bundle:nil]; 
ObjLocationMap.address = ObjLocInfo->address; 
ObjLocationMap.latitude = ObjLocInfo->latitude; 
ObjLocationMap.longtitude = ObjLocInfo->longtitude; 



[self.navigationController pushViewController:ObjLocationMap animated:YES]; 
[ObjLocationMap release]; 

} 
} 

私は思ったほど単純ではありませんか?そうでない場合、誰かが正しい方向に私を指すように時間を持っている場合、私は...それを本当に感謝:-S

おかげで、

ニック

+1

は 'googlemap'の種類は何ですか? 「満たされた」とはどういう意味ですか? –

+0

「フィールド( 'googlemap')が入力されていないということを意味していますか?テキストフィールドですか? – filipe

+0

申し訳ありませんが、SQLデータベースのNSString内のVARCHARフィールドです。これは通常、アドレス情報を保持しています(したがって、上部のbtnMapボタン)。 –

答えて

2

私はそれを想定し、これをお答えします、特定のプロパティがnilに設定されている場合は、ボタンを消す必要があります。 (プロパティが空であるかどうかを確認するためのより良い方法のための私のanswer hereを確認してください。)

まず、必ずヘッダファイルに

IBOutlet UIButton *button; 

を使用して、ボタンにコンセントを宣言し、接続した作りインタフェースビルダーのすべてが適切です。これには、ボタンをbutton店舗に、touchUpInsideイベントをIBActionに接続することが含まれます。次に、あなたのviewDidLoad方法のためにこれを使用します。これを使用して

-(void) viewDidLoad { 
    [super viewDidLoad]; 
    if (googlemap == nil) { 
     [button setHidden:YES]; 
     [button setEnabled:NO]; 
    } 
} 

は、あなたのアプリが時にビューのロードgooglemapプロパティをチェックし、button場合googlemapが空で非表示になります。それ以外の場合は、通常どおりビジネスを続けます。

IBActionからifステートメントを削除することができます。このステートメントは、ユーザーがボタンを押したときにのみ呼び出されるためです。ボタンが非表示の場合、メソッドは決して呼び出されません。

+0

こんにちはSam、これは感謝しています。私は1時間ほどかけて別のものを調整しようとしました。論理的)...私は明日の朝に完全な結果を投稿します。 –

+1

Nic、インタフェースビルダーのすべての適切な接続を作ってもよろしいですか? –

+0

こんにちはサム、私はすべてがIBから適切に接続されていると思います。私はbtnMapmを持っています。それは - (IBAction)btnMapMを使って宣言されます。ヘッダーファイルに追加します。 しかし、私はあなたのコードが私のファイル(他人がプログラムしたもの)で動作しない理由を見つけたと思います - ヘッダファイルは宣言していますが、\t IBOutlet \t UIButton * btnMap;それは、メインファイルではまったく使用されません。 代わりに、bluebuttonという新しいボタンがviewDidLoadに作成されます。このボタンは、IBで作成されたmy btnMapMを参照します。 これは悪い習慣であると私は理解していました。ヘッダーファイルに宣言する必要がありますか? –

1

-(IBAction)btnMapM: (id)sender 
{ 
    ... 

とも@Samリッチーの答えをお試しください。

+0

これは実際問題を解決しません。 IBActionは 'sender'パラメータを取らずにただ見つかるようになります。もし見つからなければ、もちろん' sender'で何もできません。私が理解していたのは、彼がボタンが消えてしまった後に何らかの方法でコントロールするのではなく、ボタンを消してほしいということでした。 –

+0

@Sam、以前は失敗したけど、あなたは正しい。これは彼の質問に全く答えません。あなたは正しい答えです。 –

+0

実際には、cocos2dグラフィックスフレームワークを使用しているときに、まったく同じ問題が発生しましたので、アドバイスを+1してください! –

0

これは私のナビゲーションバーのボタンが別にviewDidLoadで宣言されたことになりました(btnMapmは実際のボタンではなく、実際のボタンではありません)サムズ次のようにそれを隠すようにするviewDidLoadでのif文:

if (googlemap != nil) { 

     BlueButton *blueSaveButton = [[BlueButton alloc] init]; 
     [blueSaveButton setTitle:@"Map" forState:UIControlStateNormal]; 
     [blueSaveButton addTarget:self action:@selector(btnMapM) forControlEvents:UIControlEventTouchUpInside]; 
     UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:blueSaveButton]; 
     self.navigationItem.rightBarButtonItem = button; 
     [button release]; 
     [blueSaveButton release]; 
    } 

そして、そのうちの把握は私に約3時間かかりました。初心者になると...しかし、おそらくこれは他の誰かを助けるでしょう!

おかげ

ニック

関連する問題