2012-07-04 2 views
1

UIButton의 활성화/비활성화에 문제가 있습니다. 나중에 코드에서 다시 활성화하지 않으면 버튼이 비활성화됩니다. 나중에 활성화하면 비활성 상태 (불투명도가 변경됨)로 표시되지만 첨부 된 IBAction 함수가 여전히 호출되면이를 누를 때 나타납니다.UIButton이 비활성화 된 후에도 여전히 IBAction을 호출합니다.

코드 :

- (void)loadDataFromURL:(NSURL *)URL withLoadIndicator:(UIActivityIndicatorView *)loadIndicator errorName:(NSString *)name sender:(id)sender andCallback:(SEL)selector{ 

    // Start loading indicator, block button so we will have only one call at a time 
    [loadIndicator startAnimating]; 

    if ([sender isKindOfClass:[UIButton class]]) { 
     UIButton *button = sender; 
     [button setEnabled:NO]; 
    } 

    // Run the data load sequence 
    self.dispatchQueue = dispatch_queue_create("com.companyname.settingsqueue", 0); 

    dispatch_async(self.dispatchQueue, ^{ 
     // Downloading JSON and using CoreData to put it into the sqlite database here 
    }); 

    // After loading is complete stop animating and re-enable the button 
    dispatch_async(dispatchQueue, ^{ 
     [loadIndicator stopAnimating]; 
     if ([sender isKindOfClass:[UIButton class]]) { 
      UIButton *button = sender; 
      button.enabled = YES; 
     } 
    }); 
} 

이상한 것은 그것이 loadIndicator을 위해 완벽하게 작동합니다. 함수의 보낸 사람 매개 변수에서 가져온 단추가 존재하지 않습니다 (null이 아닙니다). button.enabled = YES;을 제거하면 정상적인 상태로 유지됩니다. 비동기 실행 중에 버튼을 계속 활성화하지 않고 비동기 코드를 실행 한 후에 다시 활성화 할 수 있습니까?

나를 도와 주셔서 미리 감사드립니다.

답변

1

광범위한 검색을 통해 문제에 대한 해결책을 찾았습니다. 왜냐하면 내 함수가 끝났지 만 UI가 업데이트하지 않은 주 스레드에서 모든 UIView 함수를 실행하지 않기 때문입니다. 따라서 UIView와 UIActivityIndicator가 화면에서 아직 제거되지 않았더라도 버튼이 실제로 잠시 사용 불능으로 설정된 다음 다시 활성화됩니다.

나는이 문제가 비슷한 사람에게 도움이되기를 바랍니다.