Passaggio di viewcontroller al tap di un uibutton

di il
3 risposte

Passaggio di viewcontroller al tap di un uibutton

Salve a tutti!
Ho 2 subclassi di uiviewcontroller. Nella prima ho una uitableview e ogni cella della table contiene un uibutton che dovrebbe mostrare la detailview view della cella stessa. Quindi quando viene premuto il button cambia l uiviewcontroller. Il problema e che ho bisogno che il primo view controller abbia l istanza del secondo uiviewcontroller per passargli il contenuto della cella in questione. Ho provato anche dal secondo viewcontroller a fare una cosa del genere:

-(void)viewDidLoad{
  [super viewDidLoad];
  Uiviewcontroller *parent = [self parentviewcontroller];  //ma ritorna nil
}
Come posso risolvere il problema?

3 Risposte

  • Re: Passaggio di viewcontroller al tap di un uibutton

    Ciao!

    Per pushare/presentare il nuovo controller dalla table view devi per forza di cose istanziarlo. Suppongo tu lo faccia nel metodo del delegato della table view didSelectRowAtIndexPath.

    Non è detto che sia la cosa migliore che tu possa fare, ma dipende dalla situazione in cui ti trovi. Leggendo ciò che scrivi ti dico di mantenerti il riferimento del controller appena istanziato (nel didSelectRow).
  • Re: Passaggio di viewcontroller al tap di un uibutton

    Ah no gurda sono riuscito a risolvere così:
    
    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        UIButton *pressed = (UIButton*)sender;
        LDSong *songToSend = [savedMusic objectAtIndex:pressed.tag];
        if([segue.identifier isEqualToString:@"song"]){
            ViewController *detail = (ViewController*)[segue destinationViewController];
            detail.song = songToSend;
        }
        else if([segue.identifier isEqualToString:@"play"]){
            UITabBarController *tab = (UITabBarController*)[segue destinationViewController];
            NSArray *controllers = [tab viewControllers];
            UINavigationController *play;
            for(UINavigationController *view in controllers){
                if([[view title] isEqualToString:@"Playing"]) play = view;
            }
            PlayViewController *toReproduct = [[play childViewControllers] objectAtIndex:0];
            toReproduct.playing = songToSend;
            toReproduct.codaRiproduzione = savedMusic;
            toReproduct.songIndex = pressed.tag;
            [tab setSelectedViewController:play];
        }
    }
    
    La funzione(che sovrascrive quella di uiviewconroller) viene richiamata automaticamente alla pressione di qualunque tasto(segue) nel viewcontroller(che appunto estende la classe uiviewcontroller). basta dare un id al segue nella storyboard e fare un controllo su quello per distinguere l'azione che verrà fatta. Ovviamente quello che verrà scritto all'interno degli if(){}elseif{} lo devi decidere tu in base a quello che vuoi fare.
  • Re: Passaggio di viewcontroller al tap di un uibutton

    Ah, stai usando gli storyboard. Io non sono un grande fan di questi comunque va bene anche cosi
Devi accedere o registrarti per scrivere nel forum
3 risposte