gpt4 book ai didi

c# - Xamarin IOS UITableViewController RowSelected 导航到 UIViewController

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:30:51 27 4
gpt4 key购买 nike

我有 UITableViewController。当用户单击单元格时,我需要打开另一个 ViewController。这是我的代码:

公共(public)部分类 CCreateOrderOrderType : UITableViewController { 私有(private)列表 orderTypes; 私有(private) LoadingOverlay loadingOverlay; public CCreateOrderOrderType (IntPtr handle) : base (句柄) {

    public CCreateOrderOrderType (List<OrderType> orderTypes){
this.orderTypes = orderTypes;
}

public override void ViewDidLoad(){
TableView.Source = new OrderTypeTableSource (this, orderTypes);
}
}

public class OrderTypeTableSource : UITableViewSource {

private CCreateOrderOrderType owner;
private List<OrderType> orderTypes;
private string cellIdentifier = "orderGroupCI";

public OrderTypeTableSource(CCreateOrderOrderType owner, List<OrderType> orderTypes){
this.owner = owner;
this.orderTypes = orderTypes;
}

public override nint RowsInSection (UITableView tableview, nint section){
return orderTypes.Count;
}

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
OrderType item = orderTypes[indexPath.Row];
if (cell == null)
{
cell = new UITableViewCell (UITableViewCellStyle.Subtitle, cellIdentifier);
cell.DetailTextLabel.Text = item.orderTypeName;
cell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
}
return cell;
}

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
CCreateOrderC clientOrderCreate = owner.Storyboard.InstantiateViewController ("CCreateOrderC") as CCreateOrderC;
clientOrderCreate.selectedOrderType = orderTypes [indexPath.Row];
if (clientOrderCreate != null) {
owner.NavigationController.PushViewController (clientOrderCreate, true);
}
tableView.DeselectRow (indexPath, true);
}
}

但是我在第一行有空指针异常。怎么了?

最佳答案

编辑:我不知道你在源类中的什么地方,而不是在 Controller 中。

解决此问题的简单步骤。不是很干净,但现在就可以了:

  1. 获取 Storyboard:UIStoryboard.FromName("main", NSBundle.MainBundle);

这里,“main”是 storbyoard 的名称。检查 .storyboard 文件的文件名。

  1. 使用 .InstantiateViewController ("CCreateOrderC") as CCreateOrderC; 从 Storyboard中获取 Controller 你已经做得很好了。

  2. 确保它不为空,你也做得很好。

  3. 将该 Controller 推送到当前导航 Controller 上。

因为你在这里没有它,你可以将它作为公共(public)属性(property)传递(这是“不是 super 干净”的部分)。

只需在您的类之上添加一个公共(public)属性,即 public UINavigationController CurrentNavigationController ,

在你创建那个 tableview 源的地方,简单地做

mySource.CurrentNavigationController = this.navigationcontroller

现在您有了导航,您可以像以前一样在 RowSelected 中推送它,

CurrentNavigationController.PushViewController(theVcYouInstantiatedWithTheStoryboard);

编辑前的上一个答案

空指针的意思是,“你正在对某个空指针执行代码”。

我打赌“parentController”是空的,你不能在空对象上调用代码。仅此一项就可以回答您的问题并帮助您继续发现问题所在 :)

好的是,我很确定你不需要那个 parentController无论如何。

我建议你更换parentController通过 this .

此外,如果您使用 Storyboard,您可以使用 segue这几乎是零代码(您可以删除所有行!)。

这是如何做到的:

在 Storyboard 中,只需使用右键单击或 ctrl + clic(起点 => 目的地)从 Controller A 拖放到 Controller B。然后选择出现的箭头,并给它一个唯一的名字。例如FromAToB在代码中,调用 performSegueWithIdentifier:来自 this , 并将 Storyboard ( FromAToB ) 中的 segue 名称作为 NSString 参数。

就是这样:)

您可以覆盖 prepareForSegue如果您需要传递一些数据,请在您的 Controller 中,但这是另一个话题。

如果您仍然有问题或需要在某处进行更多说明,请在下面发表评论:)

关于c# - Xamarin IOS UITableViewController RowSelected 导航到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749776/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com