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

问题描述:

我有几个按钮可以为另一个类设置一些变量(通过extern)。事情是这个变量改变滑块的最大值和UIImage的图像。Cocoa触摸切换视图时触发方法的最佳方式

我通过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]; 
} 

我删除这样的观点上Pages.m:

- (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]; 
} 

在同一个文件中,viewDidLoad方法如下所示:

- (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)viewWillAppear:(BOOL)animated方法!

该方法/应该/为您工作!

+0

我之前尝试过,但有些错误。你是对的。 [super viewWillAppear:YES];必须在那里才能工作。另外,我必须在[super viewDidLoad]之前放置pageSlider.minimumValue和maximumValue,否则在第一次单击按钮时不会调用它。 viewDidLoad我仍然用来初始化一些东西。 – HotFudgeSunday 2011-04-02 12:01:04