【问题标题】:removeFromSuperview is not working if it is called from another class如果从另一个类调用 removeFromSuperview 将不起作用
【发布时间】: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
  • 或者只是使用消息传递协议(方法)从另一个类中删除视图。

标签: ios xcode uitableview uiview uiviewcontroller


【解决方案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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多