如何从子视图返回到上一个视图

时间:2011-07-18 17:32:14

标签: objective-c ios4 uiimage addsubview

我正在开发一个由不同模块组成的应用程序。 通过起始页面可以导航到那些不同的模块。

其中一种是一种图像选择器,一种将多个图像缩略图显示为按钮的视图。

点击此缩略图后,整个图像(也是一个按钮)显示在子视图上。

要返回缩略图视图,应该可以再次单击图像(按钮)。

问题是,我总是被引导回起始页面,我可以在不同模块之间进行选择。

在这里,您可以在我的ViewController中找到实现:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
int counter;
int x = 30;
int y = 10;

for (counter = 1; counter < 9 ; counter++) {

UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

CGRect rect = CGRectMake(x, y, 307, 230);
imageButton.frame = rect;

[imageButton addTarget:self action:@selector(showImage:) forControlEvents:UIControlEventTouchUpInside];
[imageButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"tn%i.jpg",counter]] forState:UIControlStateNormal];
    imageButton.tag = counter;
[self.view addSubview:imageButton];
    x = x + 327;
    if (counter == 3){
        x = 30;
        y = 260;
    }
    if (counter ==6){
        x = 30;
        y = 510;
    }
}
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

-(void)showImage:(id)sender
{

int imageCounter = [sender tag];
UIButton *imageLarge = [UIButton buttonWithType:UIButtonTypeRoundedRect];

CGRect largeRect = CGRectMake(0,0, 1024, 768);
imageLarge.frame = largeRect;

[imageLarge addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
[imageLarge setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%i.jpg",imageCounter]] forState:UIControlStateNormal];
imageLarge.tag = imageCounter;
[self.view addSubview:imageLarge];

}

-(void)back:(id)sender
{
[UIView beginAnimations:@"flipview" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES];

[self.view setHidden:YES];

[UIView commitAnimations];  

}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

-back:,当您想要关闭显示的图像时似乎被调用,将self.view设置为隐藏。从您的代码中,self.view是您正在显示的图像的 superview 。所以你隐藏了整个视图,只留下上一个菜单视图。

所以你要做的就是将imageView存储到实例变量或属性中,然后执行:

imageView.alpha = 0.0; //Alpha animates, hidden doesn't

然后确保在适当的时候从superview中删除imageView。