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

Posted

技术标签:

【中文标题】如果从另一个类调用 removeFromSuperview 将不起作用【英文标题】:removeFromSuperview is not working if it is called from another class 【发布时间】:2014-05-06 06:40:20 【问题描述】:

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

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

【问题讨论】:

使用 NSNotificationCenter 或为该类创建委托 self.dTVC 不是来自另一个类。我希望,你需要通过UISplitViewController 或者只是使用消息传递协议(方法)从另一个类中删除视图。 【参考方案1】:

所以有几种方法可以做到:

第一种方式:

在 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块

针对初学者的初步建议:

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

[[NSNotificationCenter defaultCenter] removeObserver:self];

【讨论】:

谢谢。我现在使用委托。 :) 好吧,我认为这种方式更专业。但这取决于任务,但在您的情况下,我建议您使用委托或阻止。这取决于你,只要确保委托对象响应选择器【参考方案2】:

试试这个....

在下面添加您可以删除视图的代码

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

-(void)removeFromSuperviev

     [view removeFromSuperview];

在下面添加您需要删除的代码表单

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

【讨论】:

以上是关于如果从另一个类调用 removeFromSuperview 将不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类调用非静态抽象方法

在java中从另一个调用一个构造函数[重复]

从另一个类修改 UIButton 的 alpha 属性

Tkinter - 在类中使用Button命令从另一个类调用函数

从另一个类创建超级视图的子视图不起作用

如何在 Java 中从另一个构造函数调用一个构造函数?