Frage Führen Sie Segue programmgesteuert durch und übergeben Sie Parameter an die Zielansicht


In meiner App habe ich eine Schaltfläche, die ein Programm programmgesteuert ausführt:

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

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die Zielansicht zu referenzieren und einige Parameter zu übergeben.

Ich weiß das prepareForSegue Methode, kann ich darauf verweisen mit:myDestinationViewController *vc = [segue destinationViewController];, aber ich weiß nicht, wie das Programm programmgesteuert ausgeführt wird.

Hast du eine Idee?

Danke, yassa


AKTUALISIEREN:

Es tut mir leid für diese Frage !!! Ich entdeckte einfach, dass, selbst wenn das Segment programmgesteuert aufgerufen wird prepareForSegue Methode wird trotzdem aufgerufen und so können Parameter auf die gleiche Weise übergeben werden.


171
2018-02-12 12:34


Ursprung


Antworten:


Die Antwort ist einfach, dass es keinen Unterschied macht, wie der Übergang ausgelöst wird.

Das prepareForSegue:sender: Methode wird in jedem Fall aufgerufen und hier übergeben Sie Ihre Parameter.


104
2018-05-28 10:22



Alte Frage, aber hier ist der Code, wie man das macht, was man fragt. In diesem Fall übertrage ich Daten von einer ausgewählten Zelle in einer Tabellenansicht an einen anderen Ansichtscontroller.

in der .h-Datei der Ansicht:

@property(weak, nonatomic)  NSObject* dataModel;

in der .m-Datei:

@synthesize dataModel;

dataModel kann sein string, intoder wie in diesem Fall ist es ein Modell, das viele Elemente enthält

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

ODER...

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

90
2017-12-20 21:11



Ich verstehe das Problem, den Übergang an einer Stelle durchzuführen und den Zustand beizubehalten, Parameter in Vorbereitung auf den Übergang zu senden.

Ich habe einen Weg gefunden, dies zu tun. Ich habe ViewControllern eine Eigenschaft namens userInfoDict hinzugefügt, die eine Kategorie verwendet. und ich habe die Überleitung auch mit Identifier überschreiben, so dass Wenn der Sender selbst ist (bedeutet der Controller selbst). Es wird dieses userInfoDict an den nächsten ViewController übergeben.

Hier können Sie anstelle des gesamten UserInfoDict auch die spezifischen Parameter als Absender übergeben und entsprechend überschreiben.

1 Sache, die du beachten solltest. Vergessen Sie nicht, die super-Methode in der performSegue-Methode aufzurufen.


0
2017-09-05 20:57



Falls Sie eine neue swift-Version verwenden.

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

        }
}

0
2018-03-08 10:53



Schnell 4:

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

Schnell 3:

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

0
2018-03-12 10:06