2017-05-25 1 views
0

Ich bin neu in der iOS-Entwicklung, googelte für mein Problem, aber die meisten Lösungen sind für Swift 3. Ich entwickle meine Anwendung in Xamarin Native iOS.Xamrin iOS - Auf Listenansicht RowSelected Open View Controller

Ich habe eine UITableView mit einer Liste von Daten. Alles, was ich tun muss, ist, wenn ich auf eine Zeile klicke, öffnet das Ereignis eine neue Seite über ViewController, die detaillierte Informationen der ausgewählten Daten anzeigt.

Hier ist mein Code für UITableView in PlayersListController.cs Datei:

public override void ViewDidLoad() { 
    base.ViewDidLoad(); 
    // Perform any additional setup after loading the view, typically from a nib. 

    // THIS data GOES TO "PlayersListTableSource" CLASSS 
    string[] data = new string[] { 
     "Player One", 
     "Player Two", 
     "Player Three", 
     "Player Four", 
     "Player Five" 
    }; 


    UITableView myTable; 

    myTable = new UITableView 
    { 
     Frame = new CoreGraphics.CGRect(0, 30, View.Bounds.Width, View.Bounds.Height), 
     Source = new PlayersListTableSource(data) 
    }; 

    View.AddSubview(myTable); 
} 

Hier meine Modellklasse PlayersListTableSource.cspublic Klasse ist

PlayersListTableSource : UITableViewSource 
{ 
public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
{ 
// WHAT TO DO HERE… 

new UIAlertView("Alert", "You touched: " + tableItems[indexPath.Row], null, "Ok", null).Show(); 

tableView.DeselectRow(indexPath, true); 

// PlayerDetailController is my view controller I want to open on button click 

// SOME THING LIKE THIS 

PlayerDetailController PlayerDetailController = this.Storyboard.InstantiateViewController("PlayerDetailController") as PlayerDetailController; 

this.NavigationController.PushViewController(PlayerDetailController, true); 

} 

} 

Antwort

1

Ihre UITableViewSource wird in der Regel nicht einen Zeiger auf die haben Navigationscontroller, daher ist es in den meisten Fällen notwendig, Der folgende Code ist eine sehr einfache Art und Weise zu tun, was Sie wollen.

und dann in Ihrer Quelle möchten Sie nur halten, dass Navigation Controller-Zeiger für die Verwendung auf Zeile auswählen.

PlayersListTableSource : UITableViewSource 
{ 
    private UINavigationController primNav {get; set;} 


    public PlayersListTableSource(List<Object> myData, UINavigationController nav) 
    { 
     //DO what you want with your data 

     primNav = nav; 
    } 

    public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
    { 
     new UIAlertView("Alert", "You touched: " + tableItems[indexPath.Row], null, "Ok", null).Show(); 

     tableView.DeselectRow(indexPath, true); 

     // PlayerDetailController is my view controller I want to open on button click 

     // SOME THING LIKE THIS 

     PlayerDetailController PlayerDetailController = primNav.Storyboard.InstantiateViewController("PlayerDetailController") as PlayerDetailController; 

     primNav.PushViewController(PlayerDetailController, true); 
    } 
} 
+0

Ich habe Ihren Code verwendet. Auf der folgenden Zeile: 'PlayerDetailController PlayerDetailController = this.Storyboard.InstantiateViewController („PlayerDetailController“) als PlayerDetailController;' Ich erhalte Fehler „Hat ein defination für Drehbuch und keine Erweiterungsmethode nicht enthalten ..“ –

+0

@zainSMJ Entschuldigungen, es sollte primNav.Storyboard sein Ich habe den obigen Code geändert, um dies widerzuspiegeln. – Digitalsa1nt

+0

Funktioniert perfekt :) Danke –

Verwandte Themen