2014-05-06 39 views
0

我有一个主视图,如图所示。我添加了2个子视图,每个都有自己的视图控制器。如果从另一个类中调用removeFromSuperview不起作用

ipadMainViewController

self.dTVC= [[dialoguesTableViewController alloc] initWithNibName:@"dialoguesTableViewController" bundle:nil]; 
[self.dTVC.view setFrame:rectFordTVC]; 
[self.view addSubview:self.dTVC.view]; 

在那之后,我想,如果我在CategoriesViewController按一个按钮来删除的dialoguesTableViewController的看法。但是,我无法删除它。 在CategoriesViewController,我这样写,但dialoguesTableViewController不能从ipadMainViewController删除。我该怎么做?

CategoriesViewController,我写这样的代码,但它不工作。

self.dTVC= [[dialoguesTableViewController alloc] initWithNibName:@"dialoguesTableViewController" bundle:nil]; 
[self.dTVC.view removeFromSuperview]; 

enter image description here

+0

使用NSNotificationCenter或该类 –

+0

创建委托'self.dTVC'不从另一个类做。我希望你需要通过'UISplitViewController'。 –

+0

或者只是使用消息传递协议(方法)从另一个类中删除视图。 –

回答

2

因此,有几个方法如何做到这一点:

第一种方式:

添加观察员ipadMainViewController初始化方法或viewDidLoad方法这取决于你的需求。

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(buttonPressed) 
              name:@"kNotificationDidPressedButon" 
              object:nil]; 

添加-buttonPressed方法ipadMainViewController控制器删除您的视图或其他您的目的。

- (void)buttonPressed 
{ 
    // remove view here 
} 
在当你点击相应的按钮添加以下代码的方法CategoriesViewController

[NSNotificationCenter defaultCenter] postNotificationName:@"kNotificationDidPressedButon" 
                object:self]; 

方式二:

委托属性添加到CategoriesViewController。你可以找到信息如何使代表例如这里:link

第三条道路:

使用Objective-C的块

为初学者初步意见:

我建议你从第一种方式开始,因为它是最容易理解的。您还必须删除ipadMainViewControllerr中的观察者,方法为-dealloc-viewWillDisapper,这取决于您添加观察者的位置,例如,在-init方法或-viewDidLoad-viewWillAppear回调;

[[NSNotificationCenter defaultCenter] removeObserver:self];

+0

谢谢。我现在使用委托。 :) –

+0

好吧,我认为这是更专业的方式。但这取决于任务,但在你的情况下,我建议你使用委托或阻止。这取决于你,只要确保委托对象响应选择器 –

0

试试这个....

添加下面的代码,你可以删除视图

-(void)viewDidLoad{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeFromSuperview) name:@"REMOVE" object:nil]; 
} 
-(void)removeFromSuperviev{ 

    [view removeFromSuperview]; 
} 

添加以下代码的形式,你需要删除

[[NSNotificationCenter defaultCenter] postNotificationName:@"REMOVE" object:nil]; 
相关问题