iOS与MonoTouch - 将UIViewController更改为UITableViewController

时间:2012-02-24 20:33:01

标签: ios xamarin.ios

我最近刚刚使用MonoTouch开始iOS开发,并且在启动应用程序时遇到以下错误:

  

[UITableViewController loadView]加载了   “SectionTableViewControler”nib但没有获得UITableView

这是在我将“视图控制器”更改为继承自UITableViewController而不是UIViewController之后开始的。为了解决这个问题,我进入了Xcode 4并在“表单”上删除了UITableView,并通过在h文件中拖放来为UITableView创建了一个插座。

如何将UIViewController更改为UITableViewController

2 个答案:

答案 0 :(得分:1)

您只是简单地改变IB生成的C#类继承自例如:

public class MyViewController : UITableViewController //UIViewController
{
}

...或者如果你只是改变了“Class”类型,那就不够了。由于UITableViewController需要在loadView方法中设置它的TableView属性,因此XIB将在加载时抛出错误。首先删除旧对象,然后拖放一个新的UITableViewController。您还可以在此处查看有关使用Xcode 4 Interface Builder的教程:

http://docs.xamarin.com/ios/tutorials/transitioning_from_xcode_3_to_xcode_4

我实际上建议使用MonoTouch.Dialog和DialogViewController来适应TableViews。这是学习概念的好方法,并回到核心模式:

https://github.com/migueldeicaza/MonoTouch.Dialog

答案 1 :(得分:0)

我遇到了同样的问题(差不多一年后)。你真的需要UITableViewController,还是处理UITableView的UIViewController工作得很好?

对于将来可能遇到此问题的其他人......

我只是确保UIViewController能够正确处理UITableView及其数据源和委托,而不是清除xib并再次使用空的UITableViewController。如果能帮助其他人的话,我会拼出来......

  1. 从UIViewController继承(它实际上不一定是UITableViewController就有UITableView)

    public partial class MyCustomViewController : UIViewController
    
  2. 使用Outlet属性声明UITableView属性

    private UITableView _tableView;
    [Outlet("tableView")]
    public UITableView TableView {
        get { return _tableView; }
        set { _tableView = value; }
    }
    
  3. 在重写的ViewDidLoad方法

    中指定委托和数据源
    public override void ViewDidLoad ()
    {
        TableView.DataSource = new MyCustomDataSource();
        TableView.Delegate = new MyCustomDelegate(this);
    
        base.ViewDidLoad ();
    
        // Perform any additional setup after loading the view...
    }
    
  4. 确保您的委托和数据源类分别继承并实现UITableViewDataSource和UITableViewDelegate的相应方法。

    // delegate class
    public class MyCustomDelegate : UITableViewDelegate
    {
        private MyCustomViewController _controller;
    
        public MyCustomDelegate (MyCustomViewController controller)
        {
            _controller = controller;
        }
    
        // overridden or additional methods
    }
    
    // data source class
    public class MyCustomDataSource : UITableViewDataSource
    {      
        public MyCustomDataSource ()
        {
        }
    
        // overridden or additional methods
    }
    
  5. 在“工具”面板的“连接”检查器中,确保您在xib中包含的UITableView已正确链接为MyCustomViewController tableView 和{{1} }已正确链接为UITableView的 dataSource 委托

  6. 实现通用UIViewController帮助我完全避免了错误。希望这个迟到的答案可以帮助别人。