​​Добавление TTTableViewController (из three20) в другой UIViewController

У меня проблема с three20 , и я надеюсь, что кто-то сможет мне помочь. с.

У меня есть TTTableViewController , который я использую очень аналогично тому, как его использует приложение TTTwitter из примеров проектов three20 . У меня есть всего три метода, которые я реализую: (id) init , (void) createModel и (id ) 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 ) в представление потомка 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 в его представление из класса (я вызвал TTTableViewController переменная контроллер ). Я также отверг два таких метода:

- (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: дважды не звонят), но я готов покончить с этим.

5
задан donkim 17 February 2011 в 08:12
поделиться