试图解雇subview和UIView

时间:2012-01-06 10:54:46

标签: objective-c ios cocoa-touch ipad

我仍然是iOS开发的新手。事实上,如果有一个超级菜鸟,我会是一个:p。目前我正在创建一个访问子视图的IBAction按钮。我有2个ViewControllers,AddClientVCNewClientVC,都有.nib文件。基本上,在我的AddClientVC中,我使用以下代码实现IBAction按钮:

- (IBAction)buttonPressed:(id)sender
{
    UIView *transparentBG = [[UIView alloc] initWithFrame:CGRectMake(-5, -5, 1500, 2500)];
    transparentBG.backgroundColor = [UIColor blackColor];
    transparentBG.opaque = NO;
    transparentBG.alpha = 0.5;
    [self.view addSubview:transparentBG];
    transparentBG.center = transparentBG.center;

    vc = [[NewClientVC alloc] initWithNibName:@"NewClientVC" bundle:nil];
    [self.view addSubview:vc.view];
    vc.view.center = self.view.center;
}

正如您所看到的,我将UIView实现为透明背景。基本上AddClientVC - >透明背景 - > NewClientVC。现在我已经创建了另一个IBAction按钮,但这次在NewClientVC中作为一个函数来解除被访问的子视图,如下所示:

- (IBAction)saveDismiss:(id)sender
{
    [self.view removeFromSuperview];
}

我现在遇到的问题是,当我点击saveDismiss按钮时,它只删除我之前在AddClientVC上调用的子视图,但它没有删除我创建的透明背景UIView。所以问题是如何实现一个同时删除我的子视图和我创建的UIView透明背景的动作。

我需要得到所有帮助:)

3 个答案:

答案 0 :(得分:0)

我不太确定我完全明白你想要发生什么,但也许你可以尝试这样的事情?

- (IBAction)saveDismiss:(id)sender
{
    [vc removeFromSuperView];
    [self.view removeFromSuperview];
}

答案 1 :(得分:0)

我建议您不要通过手动添加子视图来管理您的屏幕,而是使用

- (void)presentModalViewController: (UIViewController *)modalViewController
                          animated: (BOOL)animated
你的root viewController上的

方法。 或者更好地实例化UINavigationController并使用push和pop方法向下钻取/查看视图。 See apple reference here

答案 2 :(得分:0)

  

不要担心代码执行速度并对Apple的SDK保持信心。 UIKit针对最佳用户体验进行了优化。在我看来,尝试通过不恰当的SDK使用来增强代码是一种冒险的策略。 ;) - Vincent Zgueb

对不起文森特,但我不同意你的看法。我到达这里是因为我想实现一个为我的视图添加子视图的手势,这将是我的应用程序的导航。

[self.view addSubview:ctrl.view]; 

更快地呈现视图
[self.navigationController presentModalViewController:ctrl animated:NO]

顺便说一句,在我的案例中,该主​​题的解决方案是:

[self.view sendSubviewToBack:ctrl.view];