사용자가 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];
}
}
답변은 [여기] (http://stackoverflow.com/questions/17534330/didselectviewcontroller-does-not-get-called-on-certain-occasions)에 있습니다. @lenhhoxung – flouwer
왜 더 일반적인 viewDidAppear 또는 viewWillAppear을 사용하지 않습니까? – lenhhoxung