调用 Selector 方法时未从 Superview 中删除视图

Posted

技术标签:

【中文标题】调用 Selector 方法时未从 Superview 中删除视图【英文标题】:Views not being removed from Superview when Selector method called 【发布时间】:2015-01-27 20:56:17 【问题描述】:

对于我的应用,我有一个显示在 UIWebView 上方的 UIToolBar。我正在尝试做的是在单击工具栏中的 UIBarButtonItem 时从超级视图中删除工具栏和 Web 视图。

我已经将 ViewController 的 tool-bar 和 web-view 属性设置为:

@property (nonatomic, weak) UIToolbar *toolBar;
@property (nonatomic, weak) UIWebView *webView;

当调用下面的方法时,这些视图应该被删除

// Remove the toolbar and the webview 
- (void)hideToolbarAndWebView

    [_toolBar removeFromSuperview];
    [_webView removeFromSuperview];
    NSLog(@"Button clicked");

下面是我首先创建条形按钮项并将操作指定为 hideToolbarAndWebView 方法的地方:

// Create a bar button and add it to the toolbar. Action is to dismiss the tool-bar and thew web-view.
UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(hideToolbarAndWebView)];

我知道 bar-button 通过日志记录成功调用 hideToolbarAndWebView 方法,但视图没有从超级视图中删除。我该如何解决?

编辑 下面是创建工具栏的代码。它位于从 AppDelegate 调用的名为 showToolbar 的方法中。

// Create a toolbar
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:self.view.bounds];
toolBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// Default height is 44 points, but seems to close to the status bar
toolBar.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds),64);
toolBar.barStyle = UIBarStyleBlackTranslucent;
[self.view addSubview:toolBar];

下面是创建 web-view 的代码,并调用上面的showToolbarmethod:

 // Create a web view that displays the update info, and save settings for current version
    SWWebViewController *webViewController = [[SWWebViewController alloc] init];
    NSString *url=@"http://google.com";
    webViewController.URL = url;
    webViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self.navigationController presentViewController:webViewController animated:YES completion:nil];

    [webViewController showToolbar];

【问题讨论】:

toolBarwebView 将为零 你是对的@MidhunMP;我刚刚用 NSLog 检查了视图的值。 您是如何通过代码将这些添加到您的界面的?如果是的话,你能显示那个代码吗? @MidhunMP 是的,我刚刚更新了我的问题。 您为工具栏和 web 视图创建了一个局部变量,那么如何使用全局属性删除它? (你甚至没有分配) 【参考方案1】:

感谢@Midhun MP,我意识到我做错了什么。我需要将toolBarwebView 设置为全局变量,而不是尝试使用属性:

UIToolbar *toolBar;
UIWebView *webView;

而不是像这样创建toolBarwebView

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:self.view.bounds];
SWWebViewController *webViewController = [[SWWebViewController alloc] init];

由于现在创建了变量,我现在只需要像这样分配它们:

toolBar = [[UIToolbar alloc] initWithFrame:self.view.bounds];   
webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

然后,当我调用 hideToolbarAndWebView 时,toolBarwebView 都从超级视图中删除了。

【讨论】:

以上是关于调用 Selector 方法时未从 Superview 中删除视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?

在类中初始化时未从设置中加载集合

按下按钮时未从数组中填充 UILabel

Service Fabric 运行时未从 Actor 服务实例回收未使用的内存

从网站的不同页面访问时未从缓存加载 SWF 文件?

使用 Workbench 从 MSSQL 迁移到 MySQL 时未从源中检索模式列表