ios - requestheader - spring controller url



Eseguire Segue a livello di codice e passare i parametri alla vista di destinazione (4)

Swift 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ExampleSegueIdentifier" {
        if let destinationVC = segue.destination as? ExampleSegueVC {
            destinationVC.exampleString = "Example"
        }
    }
}

Swift 3:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ExampleSegueIdentifier" {
            if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
                destinationVC.exampleString = "Example"
            }
        }
    }

https://ffff65535.com

nella mia app ho un pulsante che esegue un passaggio a livello di codice:

- (void)myButtonMethod
{
    //execute segue programmatically
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}

Vorrei sapere se esiste un modo per fare riferimento alla vista di destinazione e per passarla alcuni parametri.

So che nel metodo prepareForSegue , posso riferirmi a: myDestinationViewController *vc = [segue destinationViewController]; , ma non so come eseguire questi passaggi a livello di programmazione.

Hai qualche idea?

Grazie, yassa

AGGIORNARE:

Mi dispiace per questa domanda !!! Ho semplicemente scoperto che, anche se il seguito è invocato a livello di prepareForSegue , il metodo prepareForSegue viene chiamato comunque e quindi è possibile passare i parametri nello stesso modo usuale.


Comprendo il problema di eseguire i passaggi in un unico punto e di mantenere lo stato per inviare parametri in preparazione per i passaggi.

Ho trovato un modo per farlo. Ho aggiunto una proprietà chiamata userInfoDict a ViewControllers utilizzando una categoria. e ho eseguito override anche con l'identificatore, in modo tale che Se il mittente è self (ovvero il controller stesso). Passerà questo userInfoDict al successivo ViewController.

Qui invece di passare l'intero UserInfoDict puoi anche passare i parametri specifici, come mittente e override di conseguenza.

1 cosa che devi tenere a mente. non dimenticare di chiamare il metodo super nel tuo metodo performSegue.


Nel caso in cui si utilizza la nuova versione rapida.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ChannelMoreSegue" {

        }
}

Vecchia domanda ma ecco il codice su come fare quello che stai chiedendo. In questo caso sto passando i dati da una cella selezionata in una vista tabella ad un altro controller della vista.

nel file .h della vista trget:

@property(weak, nonatomic)  NSObject* dataModel;

nel file .m:

@synthesize dataModel;

dataModel può essere string , int o simile in questo caso è un modello che contiene molti elementi

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }

O...

- (void)someMethod {
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
    [self.navigationController pushViewController: myController animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) {
        UITableViewCell *cell = (UITableViewCell *) sender;
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]];
        StoryModel *storyModel = [[StoryModel alloc] init];
        storyModel = storiesDict;
        StoryDetails *controller = (StoryDetails *)segue.destinationViewController;
        controller.dataModel= storyModel;
    }
}




segue