1. ホーム
  2. ios

[解決済み] UIButtonがタッチされた後でも選択状態を維持する

2023-03-17 14:22:49

質問

ユーザーがボタンをクリックした後、ネットワーク操作を行っている間、そのボタンを押したままにしたいのです。ネットワーク操作が完了したら、ボタンをデフォルトの状態に戻したいのです。

を呼び出すことを試みました。 [UIButton setSelected:YES] を呼び出してみました。 [UIButton setSelected:NO] を呼び出します)が、何もしないようです。同じことを、私が setHighlighted: .

私は、ネットワークオペの間、選択された状態を示すために背景画像を交換してみることができたと思いますが、それはハックのように思えます。何か良い提案はありますか?

以下は私のコードのようなものです。

- (IBAction)checkInButtonPushed
{
    self.checkInButton.enabled = NO;
    self.checkInButton.selected = YES;
    self.checkInButton.highlighted = YES;
    [self.checkInActivityIndicatorView startAnimating];
    [CheckInOperation startWithPlace:self.place delegate:self];
}

- (void)checkInCompletedWithNewFeedItem:(FeedItem*)newFeedItem wasNewPlace:(BOOL)newPlace possibleError:(NSError*)error;
{
    [self.checkInActivityIndicatorView stopAnimating];
    self.checkInButton.enabled = YES;
    self.checkInButton.selected = NO;
    self.checkInButton.highlighted = NO;
}

どのように解決するのですか?

の画像はどのように設定されていますか? UIControlStates の画像はどのように設定されていますか?の背景画像を設定していますか? UIControlStateHighlighted と同様に UIControlStateSelected ?

UIImage *someImage = [UIImage imageNamed:@"SomeResource.png"];
[button setBackgroundImage:someImage forState:UIControlStateHighlighted];
[button setBackgroundImage:someImage forState:UIControlStateSelected];

もし、内部でタッチアップではなく、ボタンのタッチダウンイベントで選択状態を設定している場合、ボタンは実際にはハイライト+選択状態になるので、それも設定したいところでしょう。

[button setBackgroundImage:someImage forState:(UIControlStateHighlighted|UIControlStateSelected)];

編集する

コメントでの私の発言を要約し、あなたが投稿したコードに対処するために...あなたの背景画像を設定する必要があります完全な UIControl の状態で背景画像を設定する必要があります。あなたのコード スニペットによると、この制御状態は、ネットワーク操作の間、無効化 + 選択 + ハイライトされます。つまり、このようにする必要があるということです。

[button setBackgroundImage:someImage forState:(UIControlStateDisabled|UIControlStateHighlighted|UIControlStateSelected)];

を削除すると highlighted = YES を削除した場合、これが必要になります。

[button setBackgroundImage:someImage forState:(UIControlStateDisabled|UIControlStateSelected)];

写真を見てください。