2017-05-25 62 views
0

我是新的iOS开发,我用Google搜索我的问题,但大多数解决方案都为雨燕3.我发展我的Xamarin原生的iOS应用程序。Xamrin iOS的 - 在列表视图RowSelected打开视图控制器

我有数据的列表一个UITableView。所有我需要做的就是当过我点击某一行,该事件将打开通过视图控制器了新的一页,这将显示所选数据的详细信息。

这里是PlayersListController.cs文件我的UITableView的代码:

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

这里是我的模型类PlayersListTableSource.cspublic类

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); 

} 

} 

回答

1

你UITableViewSource通常不会有一个指针导航控制器,所以在大多数情况下,有必要提供。下面的代码是做你想做的事情的一个非常基本的方法。

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, this.NavigationController) 
    }; 

    View.AddSubview(myTable); 
} 

,然后在你的源代码只是想保住你的导航控制器指针保持对行选择的使用。

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

我用你的代码。在下面一行: 'PlayerDetailController PlayerDetailController = this.Storyboard.InstantiateViewController(“PlayerDetailController”)作为PlayerDetailController;' 我收到错误“不包含故事板的定义并且没有扩展方法..” –

+0

@zainSMJ道歉,它应该是primNav.Storyboard我已经改变了上面的代码来反映这一点。 – Digitalsa1nt

+0

工程完美:)感谢名单 –