UIView transitionWithView подпредставление с несколькими файлами XIB - PullRequest
0 голосов
/ 27 ноября 2011

Я пытаюсь создать подпредставление в обычном представлении. Когда нажата кнопка, которая содержится в этом подпредставлении, она перевернется и покажет новое подпредставление. Это завещание предназначено для имитации переворачивания карты на столе. У меня есть DetailViewController, который является пустой XIB, но когда он загружен, он загружает другой контроллер с именем CardFrontViewController, который на самом деле содержит подпредставление (передняя часть карты) все содержится в XIB. После того, как кнопка внутри подпредставления, она должна загрузить подпредставление, которое содержится внутри xib CardBackViewController.

Внутри DetailViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    if (!self.cardFrontViewController)
    {
        self.cardFrontViewController = [[CardFrontViewController alloc] initWithNibName: @"CardFrontViewController" bundle: nil];
        [self.view addSubview: self.cardFrontViewController.view];
    }

    [self configureView];
}

Внутри CardFrontViewController

- (IBAction)flipToAnswerCard:(id)sender 
{
    if (!self.cardBackViewController)
    {
        self.cardBackViewController = [[CardBackViewController alloc] initWithNibName: @"CardBackViewController" bundle: nil];
    }

    [UIView transitionWithView: self.cardFrontContainerView
                      duration: 1.0
                       options: UIViewAnimationOptionTransitionFlipFromTop 
                    animations: ^{ [self.cardFrontSubView removeFromSuperview];
                        [self.cardFrontContainerView addSubview: self.cardBackViewController.cardBackSubView]; }
                    completion: nil];
}

Когда я нажимаю кнопку, чтобы перевернуть карту, карта переворачивается, но отображаемое представление пустое, что означает, что self.cardBackViewController.cardBackSubView не загружен внутрь. Если я сделаю [self.cardFrontContainerView addSubview: self.cardBackViewController.view] внутри метода флип-карты, он загрузит весь XIB внутри, но я действительно просто хочу посмотреть внутрь. Я не уверен, что делать здесь.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Вам не нужен UIViewController, если все, что вам нужно, это просто загрузить представление с некоторыми IBOutlets.

Просто используйте [[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil] из вашего DetailViewController, и если IBOutlets, соответствующий NIB 'card', существует, они будут автоматически связаны (с владельцем).

Если вы действительно хотите, чтобы другой класс обрабатывал эту «карту» (и «владеет» IBOutlets), обязательно ли она должна наследоваться от UIViewController? NSObject иногда может быть и хорошим кандидатом.

Наконец, если вы действительно хотите вкладывать UIViewControllers, это будет работать только в iOS5. Для поддержки предыдущих версий iOS вам в конечном итоге придется вручную вызывать некоторые методы жизненного цикла UIViewController (willAppear, didAppear ...), передавать определенные события от вашего основного UIViewController в его detailViewController (например, willAnimateToRotation) и, возможно, некоторые другие приемы ,

1 голос
/ 13 июля 2012

Если вы просто хотите перевернуть подпредставления в главном окне, ответ, который работал для меня, был найден здесь: https://stackoverflow.com/a/9028156/1319615

...