我遇到three20
的问题,我希望有人可以帮助我。
我有一个TTTableViewController
,与TTTwitter
示例项目中的three20
应用使用它的方式非常相似。我只实现了三种方法:(id)init
,(void)createModel
和(id<UITableViewDelegate>)createDelegate
。我为我的数据添加了TTListDataSource
和TTURLRequestModel
子类。总而言之,这是TTTableViewController
的一个相当简单的用法,我没有做任何与众不同的事情。
当我将此TTTableViewController
添加到UIView
的后代时,它可以正常工作。它可以完美地加载和显示数据。例如,以下两个工作正常:
FooTableViewController *controller = [[FooTableViewController alloc] init];
controller.view.frame = CGRectMake(288, 20, 480, 1004);
[self.window addSubview:controller.view];
就像这样:
FooTableViewController *controller = [[FooTableViewController alloc] init];
controller.view.frame = CGRectMake(288, 20, 480, 1004);
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.frame = CGRectMake(0, 0, 768, 1024);
// a bunch of scrollView variable initializations..
[scrollView addSubview:controller.view];
[self.window addSubview:scrollView];
当我尝试将FooTableViewController
(同样是TTTableViewController
的子类)添加到view
的后代的UIViewController
时,会出现问题。例如,以下内容不起作用:
FooTableViewController *controller = [[FooTableViewController alloc] init];
controller.view.frame = CGRectMake(288, 20, 480, 1004);
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.frame = CGRectMake(0, 20, 768, 1004);
[viewController.view addSubview:controller.view];
[self.window addSubview:viewController.view];
知道为什么会这样吗?就像我说的那样,当我将它添加到UIView
(即不在UIViewController
中的那个)时,它可以正常工作,但当我尝试将其添加到{{1 }}。除了像我上面那样尝试添加它之外,我还尝试了对UIViewController
进行子类化并从内部添加它。没有运气。
谢谢!
编辑我应该更明确一点,“它不起作用”。我只看到一张空桌子 - 只是空行。在UIViewController
上设置断点确实表明该方法未被调用。谢谢!
更新 diwup完全指出了我正确的解决方案。他是对的,因为createModel
的{{1}}和TTTableViewController
没有被调用。我通过继承viewWillAppear:
(我称之为viewDidAppear:
)并将UIViewController
从类中添加到FooViewController
来验证了这一点(我称之为TTTableViewController
变量{ {1}})。我也覆盖了这样的两种方法:
view
而且,看哪,它有效!当然,这不是一个长期的解决方案,我仍然想弄清楚如何让自己调用TTTableViewController
和controller
。
UPDATE2 我决定像这样覆盖- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[controller viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[controller viewDidAppear:animated];
}
:
viewWillAppear:
我对它不太满意,看起来很hacky(我应该确保viewDidAppear:
和viewDidLoad:
不会被调用两次),但我已经准备好称之为与它的一天。
答案 0 :(得分:3)
我的回答可能不相关。但我怀疑这个问题可能与 addSubview:方法有关。由于 addSubview:不保证视图位于视图层次结构的顶层,因此在 addSubview:期间或之后,该视图的某些方法可能不会被触发。这些方法包括 viewWillAppear:, viewDidAppear:等等。
因此,如果Three20的代码依赖于那些接口方法,那么事情可能会出错。我建议你尝试以模态方式呈现该控制器,看看会发生什么。
答案 1 :(得分:1)
同样的问题。
只需调用TableViewController的实例;
例如:
TTTableViewController tableViewController;
[tableViewController createModel]
和
[tableViewController updateView]
在viewDidLoad中。
它有效。