菜鸟教程小白 发表于 2022-12-12 20:32:36

c# - Xamarin IOS UITableViewController RowSelected 导航到 UIViewController


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

<p>公共(public)部分类 CCreateOrderOrderType : UITableViewController
    {
      私有(private)列表 orderTypes;
      私有(private)LoadingOverlay loadingOverlay;
      公共(public) CCreateOrderOrderType(IntPtr 句柄):基(句柄)
      {
      }</p>

<pre><code>    public CCreateOrderOrderType (List&lt;OrderType&gt; orderTypes){
      this.orderTypes = orderTypes;
    }

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

public class OrderTypeTableSource : UITableViewSource {

    private CCreateOrderOrderType owner;
    private List&lt;OrderType&gt; orderTypes;
    private string cellIdentifier = &#34;orderGroupCI&#34;;

    public OrderTypeTableSource(CCreateOrderOrderType owner, List&lt;OrderType&gt; 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;
      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 (&#34;CCreateOrderC&#34;) as CCreateOrderC;
      clientOrderCreate.selectedOrderType = orderTypes ;
      if (clientOrderCreate != null) {
            owner.NavigationController.PushViewController (clientOrderCreate, true);
      }
      tableView.DeselectRow (indexPath, true);
    }
}
</code></pre>

<p>但我在第一行有空指针异常。怎么了?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>编辑:我不知道你在源类中的哪个位置,而不是在 Controller 中。</p>
<p>解决此问题的简单步骤。不是 super 干净,但现在可以解决问题:</p>
<ol>
<li>获取 Storyboard:<code>UIStoryboard.FromName("main", NSBundle.MainBundle);</code></li>
</ol>
<p>这里,“main”是 Storbboard 的名称。检查 .storyboard 文件的文件名。</p>
<ol 开始=“2”>
<li><p>从 Storyboard 中获取 Controller ,使用 <code>.InstantiateViewController ("CCreateOrderC") as CCreateOrderC;</code> 你已经做得很好了。</p>
</li>
<li><p>确保它不为空,你也很好。</p>
</li>
<li><p>将该 Controller 推到当前导航 Controller 上。</p>
</li>
</ol>
<p>由于你没有它,你可以将它作为公共(public)属性传递(即“不是 super 干净”的部分)。</p>
<p>只需在你的类顶部添加一个公共(public)属性,即<code>public UINavigationController CurrentNavigationController</code>,</p>
<p>在哪里创建 tableview 源,只需执行</p>
<p><code>mySource.CurrentNavigationController = this.navigationcontroller</code></p>
<p>现在你有了导航,你可以像以前一样在 <code>RowSelected</code> 中推送它,</p>
<p><code>CurrentNavigationController.PushViewController(theVcYouInstantiatedWithTheStoryboard);</code></p>
编辑前的先前答案
<p>空指针的意思是,“你正在对一个为空的东西执行代码”。</p>
<p>我打赌“parentController”是空的,你不能在空对象上调用代码。仅此一项就可以回答您的问题并帮助您继续发现问题所在:)</p>
<p>好消息是,我很确定你不需要那个 <code>parentController</code>。</p>
<p>我建议你将 <code>parentController</code> 替换为 <code>this</code>。</p>
<p>此外,如果您使用 Storyboard,您可以使用几乎为零代码的 <code>segue</code>(您可以删除所有行!)。</p>
<p>这是怎么做的:</p>
<p>在 Storyboard 中,只需使用右键 clic 或 ctrl + clic (origin => destination) 从 ControllerA 拖放到 ControllerB。然后选择出现的箭头,并给它一个唯一的名称。例如 <code>FromAToB</code> 和在代码中,从 <code>this</code> 调用 <code>performSegueWithIdentifier:</code>,并给它 Storyboard中的 segue 名称(<code>FromAToB</code>) 作为 NSString 参数。</p>
<p>就是这样:)</p>
<p>如果您需要传递一些数据,您可以在 Controller 中覆盖 <code>prepareForSegue</code>,但这是另一个主题。</p>
<p>如果您仍有问题或需要更多说明,请在下方留言:)</p></p>
                                   
                                                <p style="font-size: 20px;">关于c# - Xamarin IOS UITableViewController RowSelected 导航到 UIViewController,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37749776/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37749776/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - Xamarin IOS UITableViewController RowSelected 导航到 UIViewController