passar dados para objeto de UIViewController no iPhone

votos
0

Eu tenho um iPhone app com um tableviewcontroller. Ao clicar em uma determinada célula abre um novo UIViewController com este código:

 nextViewController = [[avTouchViewController alloc] initWithNibName:@avTouchViewController bundle:nil];

O UIViewController acima chamado avTouchViewController tem uma propriedade que parece:

IBOutlet SomeObject *controller;

SomeObject é um objeto com todas as propriedades de vista relevantes.

Gostaria de passar um parâmetro NSString do tableviewcontroller eu inicializar o avTouchViewController com a someObject.

Como posso fazer isso?

Publicado 26/08/2009 em 23:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Estou um pouco confuso com a pergunta; você diz que está criando o seu avTouchViewControllers quando uma célula é aproveitado dentro de um já existente UITableView, mas sua última parte descreve a situação inversa.

Basicamente, se você quer passar informações para um controlador de vista, apenas dar-lhe uma propriedade que pode ser definida (que já pode ser o caso), por exemplo:

nextViewController = [[avTouchViewController alloc] initWithNibName:@"avTouchViewController" bundle:nil];
nextViewController.controller = theInstanceOfSomeObjectIWantToPass;

Você também pode querer mudar o nome da controllerpropriedade. Para um leitor, não faz sentido que um controlador de exibição tem uma propriedade chamada controllerque é realmente um SomeObject*. Como assim, seus nomes de classe devem ser capitalizados, ou seja, usar AvTouchViewControllerem vez de avTouchViewController.

Respondeu 27/08/2009 em 01:01
fonte usuário

votos
0

Se eu fosse fazer isso eu gostaria de acrescentar minha própria initializer ao meu subclasse UIViewController:

- (id)initWithController:(NSString *pController) {
    if (self = [super initWithNibName:@"avTouchViewController" bundle:nil]) {
        self.controller = pController;
    }
    return self;
}

E depois é só chamar o seguinte (em tableView: didSelectRowAtIndexPath: ou onde quer que):

NSString *controller = @"Sample String";

AVTouchViewController *nextViewController = [[AVTouchViewController alloc] initWithController:controller];
[controller release];

[self.navigationController pushModalViewController:nextViewController animated:YES];
[nextViewController release];

Como um ponto de estilo, nomes de classe convencionalmente começar com letras maiúsculas (daí minha mudança para AVTouchViewController).

Respondeu 27/08/2009 em 01:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more