2009-05-21 4 views
2

앱이 하나의보기 컨트롤러에있을 때, 탭 컨트롤러를 클릭하여 다른보기 컨트롤러를 열 때 데이터가로드되고 있음을 시뮬레이션하는보기를 추가하고 싶습니다. 예 : 앱이 레코더보기에 있으면 녹화 된 파일 목록으로 변경하면로드보기 (활동 표시기가있는보기)가 표시됩니다 (로드하는 데 시간이 다소 걸릴 수 있음). 나는 viewWillDisappear 이벤트와 함께 이것을 조작하려고 시도했지만 작동하도록 할 수 없다. viewDidAppear 이벤트가 발생하기 전에 뷰가 추가되지 않고있다.iPhone -로드보기 만들기

누구든지이 문제와 관련하여 의견이 있으십니까? 감사


는 답장을 보내 주셔서 감사합니다. 나는 tou가 제안한 것처럼 노력했지만 여전히 원할 때 보여줄 수는 없다. 내 viewWillDisappear 이벤트에서 hidden = NO를 설정하려고 시도했지만보기 컨트롤러가 사라지고 다음 컨트롤러가 사라지기 전에 표시되지 않습니다.

+0

이것은 유용한 블로그 게시물입니다! http://suavesnippets.blogspot.com/2011/06/animation-effect-on-your-splashwelcome.html – Appster

답변

2

지금은 전체 화면을 차지하는 UITabBarController가있는 것 같습니다. 내가 뭘 할 것이라고 TabBarController 위의로드보기를 배치하고 필요가 없을 때 숨 깁니다. 귀하의 탭 막대 컨트롤러에서 온 같은 xib에 loadingViewController의 하위 클래스를 만들거나 (원하는 경우 프로그래밍 방식으로) App Delegate의 IBOutlet에 설정합니다. 이 같은

뭔가 :

//In your App Delegate 
- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    [window addSubview:tabBarController.view]; 
     loadingView.hidden = YES; 
    [window insertSubview:loadingViewController.view aboveSubview:abBarController.view]; 
     [window makeKeyAndVisible]; 
} 


//In your loading View Controller 
- (void) setLoadingViewHidden:(BOOL)hidden { 
     self.view.hidden = hidden; 
     self.activityIndicator.animating = hidden; 
} 
1

내가 과거에 이런 짓을 한 방법은 활동보기 또는 적절한보기 중 하나를 수납하는 콘텐츠보기를하는 것입니다.

기본보기에 하위보기를 추가하는 대신보기 컨트롤러의 코코아 콩을 비워두고 적절한보기를 위해 새보기 (예 : 아래보기의 표보기)를 만듭니다.

또한 진행률 표시기 (threaded progress indicator) 또는 일부) 및 "결과 없음"보기로 활동보기를 작성하십시오.

// 
// ContainerViewController.h 
// 

#import <UIKit/UIKit.h> 

@interface ContainerViewController : UIViewController 
{ 
    UIView *myContainerView; 

    UITableView *myTableView; 
    UIView *mySearchActivityView; 
    UIView *myZeroResultsView; 

    UIView *myCurrentlyShowingView; 
} 

@property (retain, nonatomic) IBOutlet UIView *containerView; 

@property (retain, nonatomic) IBOutlet UITableView *tableView; 
@property (retain, nonatomic) IBOutlet UIView *searchActivityView; 
@property (retain, nonatomic) IBOutlet UIView *zeroResultsView; 

@property (assign) UIView *currentlyShowingView; 

@end 

// 
// ContainerViewController.m 
// 

#import "ContainerViewController.h" 

@implementation ContainerViewController 

@synthesize containerView = myContainerView; 

@synthesize tableView = myTableView; 
@synthesize searchActivityView = mySearchActivityView; 
@synthesize zeroResultsView = myZeroResultsView; 

- (void)dealloc 
{ 
    [myContainerView release], myContainerView = nil; 
    [myTableView release], myTableView = nil; 
    [mySearchActivityView release], mySearchActivityView = nil; 
    [myZeroResultsView release], myZeroResultsView = nil; 

    myCurrentlyShowingView = nil; 

    [super dealloc]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.currentlyShowingView = mySearchActivityView; 
    mySearchActivityView.backgroundColor = [UIColor clearColor]; 
    myZeroResultsView.backgroundColor = [UIColor clearColor]; 
} 

- (void)setCurrentlyShowingView:(UIView *)view 
{ 
    [myCurrentlyShowingView removeFromSuperview]; 
    CGRect frame = view.frame; 
    frame.size = myContainerView.frame.size; 
    view.frame = frame; 
    [myContainerView addSubview:view]; 
    myCurrentlyShowingView = view; 
    if (view == myTableView) 
     [myTableView reloadData]; 
} 

- (UIView *)currentlyShowingView 
{ 
    return myCurrentlyShowingView; 
} 

@end 

그리고 (비동기) 쿼리 출발 파생 클래스의 -viewDidLoad 방법에

:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    myQueryLoader = [[QueryLoader alloc] initWithQuery:@"whatever" delegate:self]; 
    self.currentlyShowingView = mySearchActivityView; 
} 

그런 다음 다음과 같은 것을에서 컨트롤러 클래스를 파생 위임 콜백에서 :

- (void)queryLoader:(QueryLoader *)queryLoader didEndWithResults:(id)results error:(NSError *)error 
{ 
    myItems = [results retain]; 

    if (myItems) 
     self.currentlyShowingView = myTableView; 
    else 
     self.currentlyShowingView = myZeroResultsView; 
} 

희망이 있습니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 이 코드는 우아한 솔루션처럼 보입니다. 주말에이 코드를 사용해 보겠습니다. =) –