2015-01-24 11 views
-1

서버에서 데이터를 채우는 tableview가 있습니다. 처리 아이콘을 표시하기 위해 UIActivityIndicatorView을 사용하고 있지만, 사용자가이 표시기 뷰를 계속 움직이면 뒤로 이동 버튼을 누르십시오. 이 UIActivityIndicatorView에서 stopAnimating을 어떻게 수행 할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.UIActivityIndicatorView 애니메이션 중지

다음은 ActivityIndicatorView를 만드는 데 사용하는 샘플 코드입니다. 회 전자의

self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    self.spinner.center = self.tableView.center; 
    self.spinner.color = [UIColor yellowColor]; 
    UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow]; 
    [mainWindow addSubview: self.spinner]; 
+1

당신이 "UINavigationCcontroller"를 사용하고 있다고 언급 했습니까? –

+0

@ YuchenZhong : 예. 맞습니다. UINavigationController 뒤로 버튼을 누릅니다. – kosa

+1

UIActivityIndicatorView를'keyWindow'에 추가하는 이유가 있습니까? 다른 시각이나 다른 무언가에서 작동하도록 하시겠습니까? –

답변

1

귀하의 초기화는 다음과 같이 괜찮 :

self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.spinner.center = self.view.center; 

그리고 당신은 몇 가지보기의 하위 뷰으로 추가 할 필요는 spinner를보기 위해

. 그래서 우리는 일반적으로 다음을 할 것입니다.

[self.view addSubview:self.spinner]; 

그러나 여기서는 tableview을 사용하고 있으므로 그렇게하는 것은 좋지 않습니다. 테이블 뷰는 스크롤 뷰이며, 스피너는 테이블 뷰와 함께 스크롤 할 것입니다. 테이블 뷰는 사용자에게 매우 유익합니다.

따라서 view의 서브 뷰로 self.spiner을 추가하는 것이 더 좋습니다. navgationcontroller입니다.

[self.navigationController.view addSubview:self.spinner]; 

뒤로 버튼을 누르면 회 전자가 테이블보기와 함께 사라져서 애니메이션 중단에 대해 걱정할 필요가 없습니다.

편집 : 당신은 당신이 이미 서버와 통신을 완료하고 데이터를로드 완료하면보기, 예를 들어, 멀리 가기 전에 애니메이션을 중지하려면

BTW, 당신은 항상 호출하여 수행 할 수 있습니다 [self.spinner stopAnimation].

+0

감사! 윈도우에 추가하는 것이 아니라 서브 뷰 여야한다는 것을 알았습니다. 내가 그것을 시도하자, 내가보기 codeDisear는 내가 가진 코드를 계속 사용할 수있는 어딘가 보았다, 그것에 대한 당신의 의견은 무엇입니까? – kosa

+0

편집과 관련하여로드가 끝날 때까지 기다릴 경우 애니메이션 중단 문제가 발생하지 않습니다. 로드가 아직 완료되지 않았지만 사용자가 다시 클릭하는 경우 문제가 발생합니다. – kosa

+0

네, 그렇게 할 수 있습니다. '[self.spinner stopAnimating]'을'viewDidDisappear'에 추가하면 동작합니다. 그러나 기본적으로'hidesWhenStopped'는'YES'로 설정되어 있습니다. 'self.spinner stopAnimating'을 호출했을 때, 스피너는 메모리에서 해제되기보다는 숨겨져 있습니다. 그리고 TableView 클래스에서 만들어지기 때문에 다른 누구도이 스피너가 뷰 계층에 존재한다는 것을 알지 못합니다. 따라서 코드를 변경하고 싶지 않다면 다음과 같이하십시오 :'[self.spinner stopAnimating]; [self.spinner removeFromSuperview]'. –