如果从另一个类调用removeFromSuperview,则removeFromSuperview不起作用

时间:2014-05-06 06:40:21

标签: ios xcode uitableview uiview uiviewcontroller

我有一个主要视图,如图所示。我在其中添加了2个子视图,每个子视图都有自己的视图控制器。

ipadMainViewController

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

之后,如果按dialoguesTableViewController中的按钮,我想删除CategoriesViewController的视图。但是,我不能删除它。 在CategoriesViewController中,我这样写,但无法从dialoguesTableViewController移除ipadMainViewController。我该怎么做?

CategoriesViewController中,我编写了这样的代码,但它无效。

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

enter image description here

2 个答案:

答案 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];

第二种方式:

将Delegate属性添加到CategoriesViewController。您可以在此处找到有关如何设置委托的信息:link

第三种方式:

使用objective-c块

初学者的初步建议:

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

[[NSNotificationCenter defaultCenter] removeObserver:self];

答案 1 :(得分:0)

试试这个......

添加以下代码,您可以在其中删除视图

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

     [view removeFromSuperview];
}

添加以下代码表格,您需要删除

[[NSNotificationCenter defaultCenter] postNotificationName:@"REMOVE" object:nil];