2016-05-04 7 views
0

Ich habe eine uitableview mit einer Sammlung von Objekten. Und wenn ich auf eine UITableViewCell klicke, öffne eine andere UIView. Aber ich wollte das Objekt, das sich in UITableViewCell befindet, für diese neue UIView senden und dort ihre Details anzeigen. folgte ich diese Frage zu beantworten eine andere Ansicht zu laden: ViewController Segue Xamarin Ich bin sehr dankbar, wenn jemandSo übergeben Sie das Objekt mit Hilfe des Segments

enter image description here

+0

Versuchen https://developer.xamarin.com/api/member/UIKit.UIViewController.PrepareForSegue/ – brandonscript

Antwort

1

Überschreibung PrepareForSegue in Ihrem Viewcontroller nutzen, um Parameter auf den Ziel-Controller einzustellen. Sie müssen öffentliche Methoden oder Eigenschaften auf dem Ziel-Controller definieren, die es Ihnen ermöglichen, Parameter zu übergeben:

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender) 
    { 
     if (segue.Identifier == "TaskSegue") { // set in Storyboard 
     var navctlr = segue.DestinationViewController as TaskDetailViewController; 
     if (navctlr != null) { 

      // some public method you create in your destination controller 
      navctlr.SetTask (this, item); 
     } 
     } 
    } 
1

Es gibt ein paar Lösungen, ist zunächst ein prepareForSegue (_ verwenden: Absender :) Methode:

Diskussion Die Standardimplementierung dieser Methode tut nichts; Sie können es überschreiben, um relevante Daten an den neuen View-Controller oder Fenster-Controller zu übergeben, basierend auf dem Kontext des Segments. Das Segmentobjekt beschreibt den Übergang und enthält Verweise auf beide Controller , die am Übergang beteiligt sind.

Segues können aus mehreren Quellen ausgelöst werden. Verwenden Sie daher die Informationen in den Parametern "segue" und "sender", um zwischen den verschiedenen logischen Pfaden in Ihrer App zu disambiguieren. Wenn der Übergang beispielsweise von einer Tabellenansicht stammt, würde der Absenderparameter die Zelle identifizieren, die der Benutzer angeklickt hat. Sie könnten diese Informationen verwenden, um die Daten für den Zielansicht-Controller festzulegen.

In thi Fall, dass Sie ein Objekt zu "retten", die Sie in didSelectRow übergeben möchten:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.currentObjectToPass = .. some object from array or somewhere else.. 
} 

Und dann legen Sie es zum nächsten vc:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender { 
    if ([segue.identifier isEqualToString:@"bookingDetailsSegue"]) { 
     self.nextVC = segue.destinationViewController; 
     self.nextVC.objectToPass = self.currentObjectToPass; 
    } 
} 

Der andere Weg ist es, segues zu verweigern und vc durch seine storyboardID zu bekommen.

Auf diese Weise können instantiateViewController (withIdentifier :) Methode benötigen:

Rückgabewert Der View-Controller entsprechend dem angegebenen Bezeichnerstring. Wenn der Zeichenfolge kein Ansichtscontroller zugeordnet ist, löst diese Methode eine Ausnahme aus.

Erläuterung Sie verwenden diese Methode zum Erstellen von View-Controller-Objekten, die Sie in Ihrer -Anwendung bearbeiten und programmgesteuert darstellen möchten. Bevor Sie diese Methode zum Abrufen eines View Controllers verwenden können, müssen Sie ihn explizit mit einer entsprechenden ID Zeichenfolge in Interface Builder kennzeichnen.

Diese Methode erstellt bei jedem Aufruf eine neue Instanz des angegebenen View-Controllers .

Dann wird Ihr Code wird wie folgt aussehen:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     self.nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"nextVCID"]; 

     self.nextVC.objectToPass = = .. some object from array or somewhere else.. 
    [self.navigationController pushViewController:self.nextVC animated:YES]; 
    } 

Und vergessen Sie nicht vc-Kennung (ID Storyboard) in IB hier einzustellen:

enter image description here

Verwandte Themen