我最近刚刚使用MonoTouch开始iOS开发,并且在启动应用程序时遇到以下错误:
[UITableViewController loadView]加载了 “SectionTableViewControler”nib但没有获得UITableView
这是在我将“视图控制器”更改为继承自UITableViewController
而不是UIViewController
之后开始的。为了解决这个问题,我进入了Xcode 4并在“表单”上删除了UITableView
,并通过在h文件中拖放来为UITableView
创建了一个插座。
如何将UIViewController
更改为UITableViewController
?
答案 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。这是学习概念的好方法,并回到核心模式:
答案 1 :(得分:0)
我遇到了同样的问题(差不多一年后)。你真的需要UITableViewController,还是处理UITableView的UIViewController工作得很好?
对于将来可能遇到此问题的其他人......
我只是确保UIViewController能够正确处理UITableView及其数据源和委托,而不是清除xib并再次使用空的UITableViewController。如果能帮助其他人的话,我会拼出来......
从UIViewController继承(它实际上不一定是UITableViewController就有UITableView)
public partial class MyCustomViewController : UIViewController
使用Outlet属性声明UITableView属性
private UITableView _tableView;
[Outlet("tableView")]
public UITableView TableView {
get { return _tableView; }
set { _tableView = value; }
}
在重写的ViewDidLoad方法
中指定委托和数据源public override void ViewDidLoad ()
{
TableView.DataSource = new MyCustomDataSource();
TableView.Delegate = new MyCustomDelegate(this);
base.ViewDidLoad ();
// Perform any additional setup after loading the view...
}
确保您的委托和数据源类分别继承并实现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
}
在“工具”面板的“连接”检查器中,确保您在xib中包含的UITableView已正确链接为MyCustomViewController
的 tableView 和{{1} }已正确链接为UITableView的 dataSource 和委托。
实现通用UIViewController帮助我完全避免了错误。希望这个迟到的答案可以帮助别人。