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

В моем случае реализация IValueConverter была проблемой

Я изменил:

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  string language) 
{ //code }

на

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  System.Globalization.CultureInfo culture) 
{ //code } 

... перестроить проект

52
задан Peter Mortensen 23 October 2011 в 01:32
поделиться

3 ответа

Вы можете начать с простейшего removeFromSuperview / insertSubview и постепенно добавлять к нему код.


//SwitchViewController.h
#import 
@class BlueViewController;
@class YellowViewController;

@interface SwitchViewController : UIViewController {
    IBOutlet BlueViewController *blueViewController;
    IBOutlet YellowViewController *yellowViewController;
}
- (IBAction)switchViews:(id)sender;
@property (nonatomic, retain) BlueViewController *blueViewController;
@property (nonatomic, retain) YellowViewController *yellowViewController;
@end

//1. remove yellow view and insert blue view
- (IBAction)switchViews:(id)sender {
    if(self.blueViewController.view.superview == nil)
    {
        [yellowViewController.view removeFromSuperview];
        [self.view insertSubview:blueViewController.view atIndex:0];
    }
}

//2. appear=insert, disappear=remove
if(blueViewController.view.superview == nil)
{
    [blueViewController viewWillAppear:YES];
    [yellowViewController viewWillDisappear:YES];

    [yellowViewController.view removeFromSuperview];
    [self.view insertSubview:self.blueViewController.view atIndex:0];

    [yellowViewController viewDidDisappear:YES];
    [blueViewController viewDidAppear:YES];
}

//3. now add animation
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//blue view will appear by flipping from right
if(blueViewController.view.superview == nil)
{
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                            forView:self.view cache:YES];

    [blueViewController viewWillAppear:YES];
    [yellowViewController viewWillDisappear:YES];

    [yellowViewController.view removeFromSuperview];
    [self.view insertSubview:self.blueViewController.view atIndex:0];

    [yellowViewController viewDidDisappear:YES];
    [blueViewController viewDidAppear:YES];
}
[UIView commitAnimations];

39
ответ дан 7 November 2019 в 09:15
поделиться

В главе 6 «Начало разработки iPhone» есть хороший пример переключения представлений. Вы можете увидеть его исходный код здесь: http://iphonedevbook.com/

SwitchViewController содержит код для программного изменения представлений.


- (IBAction)switchViews:(id)sender
{

    if (self.yellowViewController == nil)
    {
        YellowViewController *yellowController = [[YellowViewController alloc]
                initWithNibName:@"YellowView" bundle:nil];
        self.yellowViewController = yellowController;
        [yellowController release];
    }

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.25];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    UIViewController *coming = nil;
    UIViewController *going = nil;
    UIViewAnimationTransition transition;

    if (self.blueViewController.view.superview == nil) 
    {   
        coming = blueViewController;
        going = yellowViewController;
        transition = UIViewAnimationTransitionFlipFromLeft;
    }
    else
    {
        coming = yellowViewController;
        going = blueViewController;
        transition = UIViewAnimationTransitionFlipFromRight;
    }

    [UIView setAnimationTransition: transition forView:self.view cache:YES];
    [coming viewWillAppear:YES];
    [going viewWillDisappear:YES];
    [going.view removeFromSuperview];
    [self.view insertSubview: coming.view atIndex:0];
    [going viewDidDisappear:YES];
    [coming viewDidAppear:YES];

    [UIView commitAnimations];

}
50
ответ дан 7 November 2019 в 09:15
поделиться

Если я правильно понимаю, то, что вы пытаетесь выполнить, довольно просто.

Просто добавьте UINavigationController в делегат вашего приложения и выполните:

[navigationController pushView:vcA];

Делегаты будут вызываться соответственно:

  • (void) viewWillAppear: (BOOL) анимированный;
  • (void) viewDidDisappear: (BOOL) анимированный;
  • (void) viewDidLoad;

И когда вы хотите открыть представление и нажать другое:

[navigationController popViewControllerAnimated:true];
[navigationController pushView:vcB];

Если вы не хотите, чтобы отображение navigationController, просто используйте:

[navigationBar setHidden:YES];

Где navigationBar - это UINavigationBar, соответствующий вашему UINavigationController.

21
ответ дан 7 November 2019 в 09:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: