2013-08-14 2 views
0

사용자가 Tab Bar 항목을 클릭 할 때 표시되는 View Controller (A, B, C)가 3 개 있습니다. 사용자가 세 번째 Tab Bar 항목을 클릭하면 C View Controller가 표시됩니다. 문제는 세 번째 탭 표시 줄을 선택하면 일련의 계산을 수행하고 UI 요소를 만드는 함수가 트리거되므로 해당 작업이 완료되는 동안 활동 표시기를 표시하고 싶습니다.Tab Bar 클릭 후 활동 표시기 클릭

지금은 시간이 많이 걸리는 기능이 메인 스레드를 차단하는 상황에서 사용자가 세 번째 탭 표시 줄 항목을 클릭하면 UI가 정지되고 시간이 많이 걸리는 기능이 완료되면 C보기 컨트롤러가 표시됩니다. 그러나 함수를 실행하는 동안 회 전자 함께 C View Controller 배경을 표시하고 싶습니다. 그래서 시간이 오래 걸리는 함수를 새로운 스레드로 옮기려고했지만, 제대로 작동하지 않습니다. - (void)viewDidLoad 내 CViewController.m에서

내가 가진 :

activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
activityView.frame = CGRectMake(0, 0, 35, 35); 
activityView.center = self.view.center; 
[self.view addSubview:activityView]; 
[activityView startAnimating]; 

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

는 그런 기능 - (void)thirdTabClicked 제공 :

//Bunch of code here... 

[activityView performSelectorOnMainThread:@selector(calculationDone) withObject:nil waitUntilDone:NO]; 

그리고 - (무효) calculationDone은 다음과 같습니다

-(void) calculationDone { 
    [activityView stopAnimating]; 
    [activityView removeFromSuperview]; 
} 

하지만 작동하지 않습니다. 아마도 UITabBarControllerDelegate에 대한 사용자 지정 클래스가 있다는 사실과 관련이있을 수 있으므로 thirdTabClicked이 실제로 거기에서 호출됩니다. 그래서 내 TabBarControllerDelegate.m은 다음과 같습니다

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 

if ([viewController respondsToSelector:@selector(secondTabBarClicked)]) {   
    [(id)viewController secondTabBarClicked]; 
} 

if ([viewController respondsToSelector:@selector(thirdTabClicked)]) { 
    [(id)viewController thirdTabClicked]; 
} 
} 

답변

0

당신은 당신이 UITabBarControllerDelegate을 사용자 정의하는 이유 궁금이

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    //Fire api 
dispatch_async(dispatch_get_main_queue(), ^{ 
    // update UI 
}); 
}); 
0

을 시도하고 직접 방법은 thirdTabClicked 호출 할 수 있습니다? 이 메서드는 이미 viewDidLoad에서 호출되므로 TabbarController 대리자에서 호출 할 필요는 없다고 생각합니다.

+0

답변은 [여기] (http://stackoverflow.com/questions/17534330/didselectviewcontroller-does-not-get-called-on-certain-occasions)에 있습니다. @lenhhoxung – flouwer

+0

왜 더 일반적인 viewDidAppear 또는 viewWillAppear을 사용하지 않습니까? – lenhhoxung