Iphone 按下时,按钮保持高亮显示

Iphone 按下时,按钮保持高亮显示,iphone,ios,uibutton,Iphone,Ios,Uibutton,这是相当令人沮丧的,我搜索了很多都没有用 我有一个按钮。当按下该按钮时,它将调用执行网络操作的方法(NSURLRequest) 按钮应执行以下操作: 按下时:显示按下状态图像,启动请求方法 按下后:显示按钮的禁用状态,直到方法完成请求 问题在于,在整个请求过程中,按钮始终处于突出显示/按下状态。我在下面附上了我目前拥有的代码 对于按钮: [myButton setBackgroundImage:[UIImage imageNamed:@"defaultbutton"] forState:UI

这是相当令人沮丧的,我搜索了很多都没有用

我有一个按钮。当按下该按钮时,它将调用执行网络操作的方法(NSURLRequest)

按钮应执行以下操作:

  • 按下时:显示按下状态图像,启动请求方法
  • 按下后:显示按钮的禁用状态,直到方法完成请求
问题在于,在整个请求过程中,按钮始终处于突出显示/按下状态。我在下面附上了我目前拥有的代码

对于按钮:

[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];

当请求完成时,它会隐藏正常按钮并显示一个工作正常的重置按钮。

这将在您第一次按下按钮时使其保持高亮显示(您可以将其更改为处理图像)。如果再按一次,它将变得不亮。(我知道语法看起来很奇怪,试试看……它很管用)


现在,在请求完成后再次调用此方法。

您应该可以查看多线程文档。

如果你想要一段代码,我认为这可能很有用

[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];
}
- (IBAction)buttonPressed:(UIButton *)button 
{

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