Norolim
Norolim

Reputation: 956

Remove a subview from UIViewController

I'm adding a subview to the main view but then I cant remove it from this view.

NextViewController *nextView = [[NextViewController alloc] init];

nextView.transitioningDelegate = self;
nextView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.presentedViewController.view addSubview:nextView.view];
nextView.view.frame = CGRectMake(724, 80, 300, 150);

UIButton *stayButton = [[UIButton alloc] initWithFrame:CGRectMake(101, 94, 90, 49)];
[stayButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[stayButton setTitle:@"Detener" forState:UIControlStateNormal];
[stayButton addTarget:self
           action:@selector(waitForNextView)
 forControlEvents:UIControlEventTouchUpInside];
[nextView.view addSubview:stayButton];
stayButton.titleLabel.font = [UIFont systemFontOfSize:25];
[stayButton setTitleColor:[UIColor colorWithRed:(255/255.0) green:(255/255.0) blue:(255/255.0) alpha:1] forState:UIControlStateNormal];

here I'm adding a button to the view and then when the button is pushed it goes`-

(void)waitForNextView{
    transition = NO;
    NextViewController *nextView = [[NextViewController alloc] init];
    SectionViewController *sectionView = [[SectionViewController alloc]init];
    [self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
    actualSection = 0;
    [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(dismissView2) userInfo:nil repeats:NO];
}

I've tried with:

[nextView.view removeFromSuperView];

[nextView.presentedViewController removeFromParentViewController];

But I don't know what else can I do :S

If you want more information, nextView is a UIViewController of 300x100 size. I want to present it and then remove it when I hit the button, that's all.

I would be great if someone can help me.

Thanks

Upvotes: 2

Views: 2098

Answers (3)

Pancho
Pancho

Reputation: 4143

You are creating different reference and then you're trying to remove it from its superview while not being added at all. I will try to explain: 1. When you're adding nextView.view to self.view you have created a instance like this

NextViewController *nextView = [[NextViewController alloc] init];

2. When you're trying to remove it, instead of referring to the instance above you're creating a brand new one again in your waitForNextView method like so again

 NextViewController *nextView = [[NextViewController alloc] init];

and then you're trying to remove it. Please note that the last instance of nextView has not being added anywhere yet, and this is the reason your code doesn't work.

In order to work you should refer to the first reference you've added to self.view. Please adjust your code as shown below

In your ViewController.m

@interface ViewController()
{
 NextViewController *nextView;
}

When adding your viewController

nextView = [[NextViewController alloc] init];

nextView.transitioningDelegate = self;
nextView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.presentedViewController.view addSubview:nextView.view];
nextView.view.frame = CGRectMake(724, 80, 300, 150);

UIButton *stayButton = [[UIButton alloc] initWithFrame:CGRectMake(101, 94, 90, 49)];
[stayButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[stayButton setTitle:@"Detener" forState:UIControlStateNormal];
[stayButton addTarget:self
           action:@selector(waitForNextView)
 forControlEvents:UIControlEventTouchUpInside];
[nextView.view addSubview:stayButton];
stayButton.titleLabel.font = [UIFont systemFontOfSize:25];
[stayButton setTitleColor:[UIColor colorWithRed:(255/255.0) green:(255/255.0) blue:(255/255.0) alpha:1] forState:UIControlStateNormal];

And finally in your IBAction method

-(void)waitForNextView{
    transition = NO;
    [self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
    actualSection = 0;
    [nextView removeFromSuperview];
}

Upvotes: 2

said
said

Reputation: 553

use this code in the methode dismissView2

for (UIView *subview in view.subviews ){
    [subview removeFromSuperview];
}

Upvotes: 0

mikeyq6
mikeyq6

Reputation: 1148

The problem here is that you are adding the button as a subview to the view of nextView, so removing the view of nextView won't work.

If you add a tag to your button, then you can retrieve the subview by using the tag. Eg. When you define your button:

[stayButton setTag:1];

Then in the waitForNextView method, you can get the control like this:

UIButton *stayButton = (UIButton*)[nextView.view viewWithTag:1];
[stayButton removeFromSuperView];

Upvotes: 0

Related Questions