iphone - 将 TTTableViewController(来自 Three20)添加到另一个 UIViewController

标签 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];

就像这样:

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 中),但当我尝试将其添加到 UIViewController 时却没有。 。除了像上面那样尝试添加它之外,我还尝试了子类化 UIViewController并从内部添加它。运气不好。

谢谢!

编辑我应该更清楚地理解“它不起作用”的含义。我看到的只是一张空表——只有空行。在 createModel 上设置断点确实表明该方法没有被调用。谢谢!

更新 diwup 完全为我指明了正确的解决方案。他是对的,因为TTTableViewControllerviewWillAppear: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];
}

而且,你瞧,它成功了!当然,这不是长久之计,我还是想弄清楚如何获得viewWillAppear:viewDidAppear:由自身调用。

UPDATE2 我决定覆盖 viewDidLoad:像这样:

- (void)viewDidLoad {
    [super viewDidLoad];

    [super viewWillAppear:NO];
    [super viewDidAppear:NO];
}

我对它不太满意,它看起来很老套(我应该确保 viewWillAppear:viewDidAppear: 不会被调用两次),但我已经准备好收工了。

最佳答案

我的回答可能不相关。但我怀疑问题可能与 addSubview: 方法有关。由于 addSubview: 不能保证 View 位于 View 层次结构的顶层,因此该 View 的某些方法可能不会在 addSubview: 期间或之后触发。这些方法包括viewWillAppear:viewDidAppear:等。

因此,如果 Three20 的代码依赖于这些接口(interface)方法,事情可能会出错。我建议您尝试以模态方式呈现该 Controller ,看看会发生什么。

关于iphone - 将 TTTableViewController(来自 Three20)添加到另一个 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025873/

相关文章:

iphone - 使用 iOS 4.2 中的新打印功能生成 PDF

android - 使用 phonegap 在 iPhone 上强制纵向方向

iphone - iOS - 如何创建和销毁 UIApplication 的串行实例?

iphone - UIViewController 框架

ios - 更新选项卡栏 View Controller 中的文本标签

uiviewcontroller - 属性未在 super.init 调用时初始化

iphone - 是否有通过打开应用程序一部分的 web View 创建链接?

iphone - Three20 TLauncher 问题

object - 使用three20 ui进入界面生成器

iphone - 减速时对 UIScrollView contentOffset 的更改不会坚持