문제

내 응용 프로그램에서 나는 드릴다운 인터페이스 유형은 다음과 같:
나의 루트 뷰가 있는 항목의 목록과"추가"버튼을 누릅니다.
항목을 선택하 밀어"세부 사항"에서 보기 navigationController.
선택하면"추가"버튼을 밀어서"추가"보기입니다.

어떻게 사이의 전환을 추가 보기에 세부 정보 보기?

내가 하고 생각하는 애니메이션"pop"에 추가 보고 밀어 세부 컨트롤러에,하지만 어떻게 두 번째 부분은 애니메이션,그래서 세부 정보 보기 하거나 슬라이드에서 수직으로 또는 페이드에에서 뷰 추가?

감사합니다,
Kelso

도움이 되었습니까?

해결책

Ramin의 답변을 바탕으로 여러 샘플에서 Apple이 사용하는이 방법을 시도 할 수 있습니다.

MyListViewController.h

#import "MyAddViewController.h"

@interface MyListViewController : UITableViewController <MyAddViewControllerDelegate> {
}

- (IBAction)add:(id)sender;
@end

MyListViewController.m

// Action for bring up add view controller
- (IBAction)add:(id)sender {
    MyAddViewController *addViewController = [[MyAddViewController alloc] initWithStyle:UITableViewStyleGrouped];
    addViewController.delegate = self;

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addViewController];
    [self presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [addViewController release];     
}

// MyAddViewController's delegate method, dismiss the add view controller in here
- (void)addViewController:(MyAddViewController *)addViewController didAddData:(MyData *)data{
if (data) {
   MyDetailViewController *detailViewController = [[MyDetailViewController alloc] initWithStyle:UITableViewStylePlain];
   detailViewController.data = data;
   [self.navigationController pushViewController:detailViewController animated:YES];
   [detailViewController release]; 
}
[self dismissModalViewControllerAnimated:YES];
}

MyAddViewController.h

@protocol MyAddViewControllerDelegate;
@class MyData;

@interface MCCourseAddTableViewController : UITableViewController {
@private
    MyData *data;
    id <MCCourseAddDelegate> delegate;
}

// MyData could be NSManagedObject if you want to use Core Data
@property(nonatomic, retain) MyData *data;
@property(nonatomic, assign) id <MyAddViewControllerDelegate> delegate;

- (void)save;
- (void)cancel;
@end

@protocol MyAddViewControllerDelegate <NSObject>
@optional
- (void)addViewController:(MyAddViewController *)addViewController didAddData:(MyData *)data;;
@end

MyAddViewController.m

- (void)save {
    if (self.delegate != nil) {
        if ([self.delegate conformsToProtocol:@protocol(MyAddViewControllerDelegate)]){
            if ([self.delegate respondsToSelector:@selector(addViewController:didAddData:)]){
                // Send data back to List View, to bring up detail view controller and dismiss add view controller
                [self.delegate addViewController:self didAddData:self.data];
            }
        }
    }
}

- (void)cancel {
    if (self.delegate != nil) {
        if ([self.delegate conformsToProtocol:@protocol(MyAddViewControllerDelegate)]){
            if ([self.delegate respondsToSelector:@selector(addViewController:didAddData:)]){
                // Send nil back to ListView, to dismiss the add view controller only
                [self.delegate addViewController:self didAddData:nil];
            }
        }
    }
}

다른 팁

Add View를 세부 사항보기에 푸시하고이를 기억할 변수를 설정할 수 있습니다. 사용자가 ADD보기를 팝하려고하면 이전 변수를 확인하고 설정하면 루트 컨트롤러로 직접 팝업됩니다 (세부 사항보기를 자동으로 팝업해야합니다).

마르코

인 추가 보는 모달하고 거기에서 제공하"Done"(또는"저장")과"취소"버튼을 누릅니다.는 경우 사용자가 취소,당신은 가까운 모달.는 경우 그 수행을 저장하는 새로운 기록을 표 모델,다음 테이블에 다시 로드 루트에서 보기 전에 반환됩니다.좋은,당신은 플래시 수 있습니다 새로 추가되는 항목입니다.

청결한 방법으로 이를 설정하는 모달 컨트롤러를 구현하는 대리인을 예상하는'한'프로토콜의 방법하고 있는 루트 컨트롤러를 구현하고 설정으로 자리할 수 있습니다.

이런 방식으로 루트 컨트롤러가 통보 받을 때 사용자가 완료할 수 있도록 캡슐화하는 일이 필요합니다.가고 싶은 경우에 추가에서 직접하는 세부사항 보기 위임하는 방법을 할 수 있는'밀어'를 새롭게 추가된 기록을 얻을 것이 좋은 전에는 모달 미래 세부사항 보기입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top