40

これはおそらくばかげた質問だと思います...しかし、とにかく私はこの種の奇妙なUIButtonタイトルの振る舞いをしています。

ボタンが設定され、IBのアクションとプロパティの両方に接続されています(アクションはstartButtonPushedであり、プロパティはですstartButton)。ビューコントローラ内で、次のようにアクションを設定しています。

bool buttonStateStop;

- (IBAction)startPushed:(id)sender 
{
    if (buttonStateStop) 
    {
        [appD.locationManager stopSavingLocations];
        startButton.titleLabel.text = @"Start";
        buttonStateStop = NO;
    }
    else 
    {
        [appD.locationManager startSavingLocations];
        startButton.titleLabel.text = @"Stop";
        buttonStateStop = YES;        
    }
}

元々、IBのデフォルトのタイトルを「開始」に設定していましたが、ボタンを押すたびに、ほんの一瞬「停止」に変わり、その後元に戻ります。タイトルが「スタート」に戻され続ける理由を理解するためにしばらく時間を費やしました。やがて、IBのタイトルを「xxxxxx」に変更しましたが、ボタンのタイトルが変更された直後に、IBのタイトルが再度アサートされることに気付きました。

したがって、問題は、なぜIBがボタンのタイトルをデフォルトに戻し続けるのかということです。私はこれまでこの行動に出くわしたことがありません。そして(明らかに)どうすればそれを修正できますか?

追加情報:ボタンへの唯一の参照は、@property上記@synthesizeのコードの、、、およびステートメントです。ビューはナビゲーションコントローラーの内部にあります。

4

2 に答える 2

72

プロパティsetTitle:forState:を設定する代わりに、メソッドを使用する必要があります。titleLabel.text

[startButton setTitle:@"Start" forState:UIControlStateNormal];
// Normal and highlighted titles do not need to be the same
[startButton setTitle:@"Start!" forState:UIControlStateHighlighted];

ここで何が起こるかというと、現在の状態のビューを表すラベルにタイトルを設定しますが、状態がプッシュから通常に変わると、ボタンはラベルを新しい状態のタイトルにリセットします (これは、 IB で設定します)。

于 2012-07-20T16:29:34.467 に答える