Pergunta

No meu aplicativo, tenho uma interface do tipo de perfuração da seguinte forma:
Minha visualização raiz, que possui uma lista de itens e um botão "Adicionar".
A seleção de um item pressiona a visualização "detalhe" no NavigationController.
Selecionar o botão "Adicionar" pressiona uma exibição "Adicionar".

Como eu fizesse a transição entre a visualização Add para a visualização detalhada?

Estou pensando em fazer um "pop" unanimado na visualização Adicionar e empurrar o controlador de detalhes, mas como faço para fazer a segunda parte animada, para que a visualização detalhada deslizasse na vertical ou desaparecesse da visualização Add?

Obrigado,
Kelso

Foi útil?

Solução

Com base na resposta de Ramin, você pode tentar desta maneira, que é usada pela Apple em várias amostras:

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];
            }
        }
    }
}

Outras dicas

Você pode pressionar a visualização Add na exibição de detalhes e definir uma variável para lembrar disso. Quando o usuário tenta exibir a visualização Adicionar, você verifica a variável anterior e, se definido, você aparece diretamente para o controlador raiz (que deve aparecer na exibição de detalhes automaticamente).

Marco

Faça a visualização Adicionar um modal e, lá, forneça um botão "feito" (ou "salvar") e um "cancelar". Se o usuário hits cancelar, basta fechar o modal. Se eles acertarem, você salve o novo registro no modelo da tabela, faça uma tabela recarregue na exibição raiz antes de retornar. Para ser legal, você pode piscar o item recém -adicionado.

Uma maneira limpa de configurar isso é fazer com que o controlador modal implemente um delegado que espera um método de protocolo 'feito' e fazer com que o controlador raiz o implemente e se defina como o delegado.

Dessa forma, o controlador raiz é notificado quando o usuário acerta 'feito' para que possa encapsular tudo o que precisa acontecer. Se você deseja ir diretamente do add to Detalhe View, o método Delegate pode fazer um 'empurrar' para o recorde recém -adicionado e você receberá uma boa transição do deslizamento modal para a visualização detalhada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top