don*_*kim 5 iphone uiviewcontroller three20
我遇到了问题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];
Run Code Online (Sandbox Code Playgroud)
就像这样:
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];
Run Code Online (Sandbox Code Playgroud)
当我尝试添加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];
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?就像我说的那样,当我将它添加到一个UIView(也就是一个不在a中的那个UIViewController)时它可以正常工作,但是当我尝试将它添加到一个时它不会UIViewController.除了像我上面那样尝试添加它之外,我还尝试UIViewController了从内部添加子类并添加它.没运气.
谢谢!
编辑我应该更清楚我的意思是"它不起作用".我只看到一张空桌子 - 只是空行.确定断点createModel确实表明该方法没有被调用.谢谢!
更新 diwup完全指出我正确的解决方案.他是正确的,这是因为TTTableViewController的viewWillAppear:并viewDidAppear:没有得到调用.我通过子类化UIViewController(我称之为FooViewController)并在类中添加了TTTableViewController它view(我称之为TTTableViewController变量controller)来验证这一点.我也覆盖了两个这样的方法:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[controller viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[controller viewDidAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)
而且,瞧,它有效!当然,这不是一个长期的解决方案,我仍然想弄清楚如何自己获取viewWillAppear:和viewDidAppear:调用.
UPDATE2我决定viewDidLoad:像这样覆盖:
- (void)viewDidLoad {
[super viewDidLoad];
[super viewWillAppear:NO];
[super viewDidAppear:NO];
}
Run Code Online (Sandbox Code Playgroud)
我对它不太满意,看起来很hacky(我应该确定viewWillAppear:并且viewDidAppear:不要再被叫两次),但我已经准备好用它来称呼它了.
我的回答可能不相关。但我怀疑问题可能与addSubview:方法有关。由于addSubview:不能保证视图位于视图层次结构的顶层,因此该视图的某些方法可能不会在addSubview:期间或之后触发。这些方法包括viewWillAppear:、viewDidAppear:等。
因此,如果 Three20 的代码依赖于这些接口方法,事情可能会出错。我建议您尝试以模态方式呈现该控制器,看看会发生什么。
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |