91

UIButton で setTitle を呼び出すと、iOS 7 でボタンが点滅します。myButton.highlighted = NO を設定しようとしましたが、ボタンの点滅が止まりませんでした。

[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];

myButton.highlighted = NO;

タイトルを更新するタイマーを設定する方法は次のとおりです。

- (void)actionTimer {
    if (myTimer == nil) {

        myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
                        target: self
                        selector: @selector(showActivity)
                        userInfo: nil
                        repeats: YES];
    }
}

実際にタイトルを更新するメソッドは次のとおりです。

- (void)showActivity {

    NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

    if (pauseInterval == nil) {

        // Update clock
        seconds = [[NSDate date] timeIntervalSinceDate:startInterval] - breakTime;

        // Update total earned
        secRate = rate.value / 60 / 60;
        total = secRate * seconds;
        [totalLabel setTitle:[NSString stringWithFormat:@"%@%.4f",sym,total] forState:UIControlStateNormal];

        days = seconds / (60 * 60 * 24);
        seconds -= days * (60 * 60 * 24);
        int hours = seconds / (60 * 60);
        fhours = (float)seconds / (60.0 * 60.0);
        seconds -= hours * (60 * 60);
        int minutes = seconds / 60;
        seconds -= minutes * 60;

        // Update the timer clock
        [elapsed setTitle:[NSString stringWithFormat:@"%.2i:%.2i:%.2i:%.2i",days,hours,minutes,seconds] forState:UIControlStateNormal];
    }
}
4

9 に答える 9

229

ボタンのタイプをUIButtonTypeCustomに設定すると、点滅が止まります

于 2014-08-02T14:49:34.990 に答える
62

他のアニメーションに影響を与えるよりも優れた方法は[UIView setAnimationsEnabled:NO]、特定のタイトル アニメーションのみを無効にすることです。

目的 C:

[UIView performWithoutAnimation:^{
  [myButton setTitle:text forState:UIControlStateNormal];
  [myButton layoutIfNeeded];
}];

迅速:

UIView.performWithoutAnimation { 
    myButton.setTitle(text, for: .normal)
    myButton.layoutIfNeeded()
}
于 2016-08-22T04:57:21.470 に答える
7

デフォルトの"setTitle"の動作は間違いなく嫌です!

私の解決策は次のとおりです。

[UIView setAnimationsEnabled:NO];
[_button layoutIfNeeded]; 
[_button setTitle:[NSString stringWithFormat:@"what" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

また、ストーリーボードで、ボタンのプロパティの下でチェックを外します:

  • ハイライトで反転
  • 強調表示された調整画像

そしてチェック:

  • 画像調整無効

iOS 8でもテストされ、動作しています。

アップデート - スウィフト

カスタム ボタンを作成し、setTitleメソッドをオーバーライドすることをお勧めします。

class UnflashingButton: UIButton {
   
    override func setTitle(title: String?, forState state: UIControlState) {
        UIView.setAnimationsEnabled(false)
        self.layoutIfNeeded()
        super.setTitle(title, forState: state)
        UIView.setAnimationsEnabled(true)
    }

}
于 2014-12-18T14:08:24.167 に答える
0

別のトリック

@IBOutlet private weak var button: UIButton! {
    didSet {
        button.setTitle(title, for: .normal)
    }
}

これは、API 呼び出しを行わずにタイトルの値を知っている場合にのみ機能します。ボタンのタイトルはビューが読み込まれる前に設定されるため、アニメーションは表示されません

于 2019-01-09T21:21:23.687 に答える
0

私はコーディングと Stackoverflow が初めてなので、https://stackoverflow.com/users/4673064/daniel-tsengの優れた回答を拡張するために直接コメントするほどの評判はありません。だから私は自分の新しい答えを書かなければなりません、そしてそれはこれです:

extension UIButton {
    func setTitleWithoutAnimation(_ title: String?, for controlState: UIControlState) {
        UIView.performWithoutAnimation {
            self.setTitle(title, for: controlState)
            self.layoutIfNeeded()
        }
    }
}

素晴らしい作品、例外:

後でコード内で「setTitleWithoutAnimation」を呼び出すときに送信者が指定されていない場合、「2526 から CoreMedia アクセス許可を継承できませんでした: (null)」など、CoreMedia または CoreData に関連する奇妙なメッセージが表示されます。

これはおそらくコーディングと iOS にとって非常に基本的なことですが、新しいコーダーである私にとっては、次のようにしばらくの間、ウサギの道をたどりました。私の問題の根本に到達します。

そのため、最終的には、パラメーターのない関数にパラメーターを渡さなければならないことがわかりました。つまり、送信者を指定する必要がありました。その送信者は、UIButton、Any、または AnyObject である可能性があります。それらはすべて機能しましたが、最終的には、ボタン拡張機能を「自己」で追加することと、ボタンがそれを使用していることを後で具体的に言わないこととの間に競合があるようです。

繰り返しますが、おそらく基本的ですが、私には新しいので、共有する価値があると思いました.

于 2018-04-05T22:39:57.413 に答える