Iphone 切换视图时触发方法的最佳方式

Iphone 切换视图时触发方法的最佳方式,iphone,cocoa-touch,ipad,Iphone,Cocoa Touch,Ipad,我有几个按钮(通过extern)为另一个类设置一些变量。这个变量改变了滑块的最大值和UIImage的图像 我是通过viewDidLoad方法来实现这一点的,问题是viewDidLoad仅在我第一次加载该控制器时才起作用 这是我如何在Home上加载控制器的代码。m: - (void)openPagesFrom:(int)pageStart to:(int)pageEnd name:(NSString *)title{ […] [UIView beginAnimations:ni

我有几个按钮(通过extern)为另一个类设置一些变量。这个变量改变了滑块的最大值和UIImage的图像

我是通过viewDidLoad方法来实现这一点的,问题是viewDidLoad仅在我第一次加载该控制器时才起作用

这是我如何在Home上加载控制器的代码。m:

- (void)openPagesFrom:(int)pageStart to:(int)pageEnd name:(NSString *)title{

    […]

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [UIView setAnimationDuration:0.7];

    if(self.pagesController == nil){
        Pages *pagesControllerCopy = [[Pages alloc] initWithNibName:@"Pages" bundle:nil];
        self.pagesController = pagesControllerCopy;
        [pagesControllerCopy release];
    }
    [self.view insertSubview:pagesController.view atIndex:1];

    [UIView commitAnimations];  
}
- (IBAction)goHome:(id)sender{
    // animate transition
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES];
    [UIView setAnimationDuration:0.7];

    [self viewWillAppear:YES];
    [super viewWillAppear:YES];

    // ****************************
    [self.view removeFromSuperview];
    // ****************************

    [self viewDidDisappear:YES];
    [super viewDidAppear:YES];

    [UIView commitAnimations];
}
 - (void)viewDidLoad {
    [super viewDidLoad];

    [myScrollView setContentSize:CGSizeMake(1024, 1420)];

    NSString *initPage = [NSString stringWithFormat:@"P%d.jpg",currentPage];
    imagePlaceholder.image = [UIImage imageNamed:initPage];

    // set new values for Slider 
    pageSlider.minimumValue = currentPage;
    pageSlider.maximumValue = totalBookPages;
}
我删除了页面上的视图。m:

- (void)openPagesFrom:(int)pageStart to:(int)pageEnd name:(NSString *)title{

    […]

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [UIView setAnimationDuration:0.7];

    if(self.pagesController == nil){
        Pages *pagesControllerCopy = [[Pages alloc] initWithNibName:@"Pages" bundle:nil];
        self.pagesController = pagesControllerCopy;
        [pagesControllerCopy release];
    }
    [self.view insertSubview:pagesController.view atIndex:1];

    [UIView commitAnimations];  
}
- (IBAction)goHome:(id)sender{
    // animate transition
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES];
    [UIView setAnimationDuration:0.7];

    [self viewWillAppear:YES];
    [super viewWillAppear:YES];

    // ****************************
    [self.view removeFromSuperview];
    // ****************************

    [self viewDidDisappear:YES];
    [super viewDidAppear:YES];

    [UIView commitAnimations];
}
 - (void)viewDidLoad {
    [super viewDidLoad];

    [myScrollView setContentSize:CGSizeMake(1024, 1420)];

    NSString *initPage = [NSString stringWithFormat:@"P%d.jpg",currentPage];
    imagePlaceholder.image = [UIImage imageNamed:initPage];

    // set new values for Slider 
    pageSlider.minimumValue = currentPage;
    pageSlider.maximumValue = totalBookPages;
}
在同一个文件上,viewDidLoad方法如下所示:

- (void)openPagesFrom:(int)pageStart to:(int)pageEnd name:(NSString *)title{

    […]

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [UIView setAnimationDuration:0.7];

    if(self.pagesController == nil){
        Pages *pagesControllerCopy = [[Pages alloc] initWithNibName:@"Pages" bundle:nil];
        self.pagesController = pagesControllerCopy;
        [pagesControllerCopy release];
    }
    [self.view insertSubview:pagesController.view atIndex:1];

    [UIView commitAnimations];  
}
- (IBAction)goHome:(id)sender{
    // animate transition
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES];
    [UIView setAnimationDuration:0.7];

    [self viewWillAppear:YES];
    [super viewWillAppear:YES];

    // ****************************
    [self.view removeFromSuperview];
    // ****************************

    [self viewDidDisappear:YES];
    [super viewDidAppear:YES];

    [UIView commitAnimations];
}
 - (void)viewDidLoad {
    [super viewDidLoad];

    [myScrollView setContentSize:CGSizeMake(1024, 1420)];

    NSString *initPage = [NSString stringWithFormat:@"P%d.jpg",currentPage];
    imagePlaceholder.image = [UIImage imageNamed:initPage];

    // set new values for Slider 
    pageSlider.minimumValue = currentPage;
    pageSlider.maximumValue = totalBookPages;
}
你知道我该怎么做吗?这样每次更改一个按钮时,它都会得到我的值?我对如何提高效率持开放态度。有人可能会正确卸载整个ViewController,但我显然做得不对。也许有一个更简单的解决办法

谢谢。

尝试使用
-(void)view将显示:(BOOL)animated
方法


那种方法/应该/适合你

我以前试过,但有点不对劲。你说得对。[超级视图将显示:是];必须在那里才能工作。另外,我必须将pageSlider.minimumValue和maximumValue放在[super viewDidLoad]之前,否则在我第一次单击按钮时它不会被调用。viewDidLoad我仍然使用它初始化一些东西。