簡體   English   中英

UIButton在按下時保持突出顯示

[英]UIButton staying highlighted when pressed

這非常令人沮喪,我搜索了很多都無濟於事。

我有一個按鈕。 按下它時,它會調用執行網絡操作的方法(NSURLRequest)。

該按鈕應執行以下操作:

  • 按下時:顯示按下的狀態圖像,觸發請求方法
  • 按下后:顯示按鈕的禁用狀態,直到方法完成請求

問題是在整個請求過程中按鈕處於突出顯示/按下狀態的STAYING狀態。 我附上了我目前在下面的代碼。

對於按鈕:

[myButton setBackgroundImage:[UIImage imageNamed:@"defaultbutton"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"pressedbutton"] forState:UIControlStateHighlighted];
[myButton setBackgroundImage:[UIImage imageNamed:@"disabledbutton"] forState:(UIControlStateDisabled|UIControlStateSelected)];
[squishButton addTarget:self action:@selector(reqMethod) forControlEvents:UIControlEventTouchUpInside];

在請求開始時的方法中:

-(void)reqMethod {
NSLog(@"Starting request..");
[myButton setHighlighted:NO];
[myButton setEnabled:NO];
[myButton setSelected:YES];

請求完成后,它會隱藏正常按鈕並顯示一個正常工作的重置按鈕。

您應該有多線程文檔的視圖。 http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

如果你想要一段代碼,我認為這可能很有用

[myButton setBackgroundImage:[UIImage imageNamed:@"defaultbutton"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"pressedbutton"] forState:UIControlStateHighlighted];
[myButton setBackgroundImage:[UIImage imageNamed:@"disabledbutton"] forState:(UIControlStateDisabled|UIControlStateSelected)];
[squishButton addTarget:self action:@selector(reqMethod) forControlEvents:UIControlEventTouchUpInside];

    dispatch_async(dispatch_get_global_queue(0, 0), 
                       ^{
                           //Your request
    dispatch_async(dispatch_get_main_queue(), 
                           ^{
                   NSLog(@"Starting request..");
                   [myButton setHighlighted:NO];
                   [myButton setEnabled:NO];
                   [myButton setSelected:YES];  
                     });
                });

為什么不在后台線程上進行網絡操作:

- (IBAction)buttonPressed:(UIButton *)button 
{

    [NSThread detachNewThreadSelector:@selector(doSomeNetworkStuff) toTarget:self    withObject:nil];
}

當您第一次按下按鈕時,這將保持按鈕突出顯示(您可以將其更改為使用圖像)。 如果再次按下它,它將變得無法突出顯示。 (我知道語法看起來很怪異,試試吧......它有效)

@property (nonatomic) BOOL buttonHighlighted

// IBAction called when button pressed the first time
- (IBAction)buttonPressed:(UIButton *)button 
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if(self.buttonHighlighted)
        {
            button.highlighted = NO;
            self.buttonHighlighted = NO;
        }
        else
        {
            button.highlighted = YES;
            self.buttonHighlighted = YES;
            //Fire request method
        }
    }];
}

現在,只需在請求完成后再次調用此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM