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