2017-05-25 63 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

工程完美:)感謝名單 –