Как вызвать loadNibNamed, не теряя UISwipeGestures? - PullRequest
1 голос
/ 15 февраля 2012

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

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if ([self currentlyInLandscapeMode:toInterfaceOrientation]) {
        [[NSBundle mainBundle] loadNibNamed:@"PhotosLandscape" owner:self options:nil];
    }else{
        [[NSBundle mainBundle] loadNibNamed:@"PhotosPortrait" owner:self options:nil];   
    }
}

- (BOOL)currentlyInLandscapeMode:(UIInterfaceOrientation)interfaceOrientation
{
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation));
}

Как вы можете переключать XIB и сохранять все состояние из моего предыдущего представления / XIB?

UPDATE

оказывается, что мои IBOutlets все еще работают, но мой свип не зарегистрирован

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Вы не можете использовать файл пера для размещения существующих объектов. Файл пера хранится в виде архива объектных графов, поэтому при загрузке пера с NSBundle loadNibNamed: или UIViewController initWithNibName: создается новый набор объектов.

Единственный способ обойти это - использовать loadNibNamed для создания экземпляра нового набора объектов и использовать их свойства frame для установки frame s для существующих объектов, что не является хорошим решением.

0 голосов
/ 15 февраля 2012

Оказывается, мне просто нужно было перерегистрировать событие удара после загрузки каждого пера (например, так)

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if ([self currentlyInLandscapeMode:toInterfaceOrientation]) {
        [[NSBundle mainBundle] loadNibNamed:@"VotePhotosLandscape" owner:self options:nil];
    }else{
        [[NSBundle mainBundle] loadNibNamed:@"VotePhotosViewController" owner:self options:nil];   
    }
    [self wireupSwipeEvents];
}

- (BOOL)currentlyInLandscapeMode:(UIInterfaceOrientation)interfaceOrientation
{
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation));
}

- (void)wireupSwipeEvents
{
    UISwipeGestureRecognizer *recognizer;
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release]; 
}
...