iPhone - структурирование кода, чтобы избежать гонки - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть приложение для iPhone, которое использует UINavigationController, некоторые представления таблиц и iAd.На верхнем уровне мой контроллер навигации показывает панель навигации.На более низких уровнях это не так.

Проблема, с которой я сталкиваюсь, заключается в том, что иногда рамка моего верхнего уровня UITableView опускается ниже нижней части экрана.Причина этого заключается в следующем:

мой метод viewWillAppear выглядит следующим образом:

-(void) viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:NO animated: animated]; // changing the last animated to NO does not help.
    [super viewWillAppear:animated];
}

, а мой метод viewDidLoad выглядит так:

- (void)viewDidLoad {
[self.navigationController setNavigationBarHidden:NO animated: NO];
    [super viewDidLoad];
    [self createTableView];
    ADBannerView *abv = [[ADBannerView alloc]initWithFrame: [self initialBannerViewFrame]];
    abv.delegate=self;
    [self.view addSubview:abv];
    self.bannerView = abv;
    [self moveBannerViewOffscreen];
    [abv release];
}

Наконец, moveBannerViewOffscreen выглядитнапример, это:

-(void) moveBannerViewOffscreen {
    // moving it down and off
    CGRect newBannerFrame = self.bannerView.frame;
    CGFloat screenHeight = [[UIScreen mainScreen]bounds].size.height;
    newBannerFrame.origin.y=screenHeight;
    bannerView.frame = newBannerFrame;
    CGRect newTableFrame = self.selectionTableView.frame;
    newTableFrame.size.height = self.view.bounds.size.height;
    self.selectionTableView.frame = newTableFrame;
}

Когда загружается представление, происходит то, что, хотя я назвал

[self.navigationController setNavigationBarHidden: NO animated: NO];

, кадр моего представления не сразу настраивается для учетаПанель навигации.Это все еще верно, когда выполняется moveBannerViewOffscreen.Таким образом, высота представления таблицы установлена ​​на 480. Когда появляется панель навигации, в результате нижняя часть представления таблицы находится ниже экрана, и пользователь не может выбрать последнюю строку.

Я уверен, что я мог бы использовать NSTimer, чтобы настроить некоторые kludge, чтобы исправить это.Но есть ли чистый способ организовать мой код, чтобы проблема не возникла в первую очередь?

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2010

На первый взгляд (без полного понимания вашей проблемы, я признаю), я подозреваю, что установка себя в качестве делегата контроллера навигации для использования одного из этих методов поможет с вашим временем:

navigationController:didShowViewController:animated:

navigationController:willShowViewController:animated:

возможно, не перемещайте ваш баннер, пока не будет вызван didShowViewController.

(Извините, если я не последовал вашему объяснению.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...