我遇到了three20
的問題,我希望有人能幫助我。添加一個TTTableViewController(從three20)到另一個UIViewController
我有一個TTTableViewController
,我非常類似於three20
的示例項目中的TTTwitter
應用程序使用它。我只有三種方法可以實施:(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
上放置斷點確實表明該方法未被調用。謝謝!
UPDATE 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];
}
而且,你看,它的工作!當然,這不是一個長期的解決方案,我仍然想弄清楚如何獲得自己調用的viewWillAppear:
和viewDidAppear:
。
UPDATE2我決定只覆蓋viewDidLoad:
像這樣:
- (void)viewDidLoad {
[super viewDidLoad];
[super viewWillAppear:NO];
[super viewDidAppear:NO];
}
我不是太高興了,這似乎哈克(和我也許應該確保viewWillAppear:
和viewDidAppear:
不會被調用兩次),但我準備好在一天之內給它打電話。
該解決方案的工作原理!如果有更好的解決方案,它會很棒。如果使用很多tt控制器,保持每個控制器和調用viewWillAppear太麻煩。 – samwize 2011-02-25 08:54:55