如果从另一个类调用 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 将不起作用的主要内容,如果未能解决你的问题,请参考以下文章