这真令人沮丧,我搜索了很多都无济于事。

我有一个按钮。按下该按钮时,它将调用执行网络操作的方法(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];
    

    请求完成后,它会隐藏普通按钮并显示可以正常工作的重置按钮。

    最佳答案

    您应该对多线程文档有所了解。
    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];
                         });
                    });
    

    10-07 20:02
    查看更多