调用 Selector 方法时未从 Superview 中删除视图
Views not being removed from Superview when Selector method called
对于我的应用程序,我有一个显示在 UIWebView 上方的 UIToolBar。我试图做的是在单击工具栏中的 UIBarButtonItem 时从超级视图中删除工具栏和 Web 视图。
我已经将 ViewController 的工具栏和 Web 视图属性设置为如下所示:
@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)];
我知道条形按钮通过日志记录成功调用了 hideToolbarAndWebView 方法,但视图没有从超级视图中删除。我该如何解决?
EDIT 下面是创建工具栏的代码。它位于从 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];
下面是创建网络视图的代码,并调用上面的showToolbar
方法:
// 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];
感谢@Midhun MP,我意识到我做错了什么。我没有尝试使用属性,而是需要将 toolBar
和 webView
设置为全局变量:
UIToolbar *toolBar;
UIWebView *webView;
而不是像这样创建 toolBar
和 webView
:
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
时,toolBar
和 webView
都从超级视图中删除了。
对于我的应用程序,我有一个显示在 UIWebView 上方的 UIToolBar。我试图做的是在单击工具栏中的 UIBarButtonItem 时从超级视图中删除工具栏和 Web 视图。
我已经将 ViewController 的工具栏和 Web 视图属性设置为如下所示:
@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)];
我知道条形按钮通过日志记录成功调用了 hideToolbarAndWebView 方法,但视图没有从超级视图中删除。我该如何解决?
EDIT 下面是创建工具栏的代码。它位于从 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];
下面是创建网络视图的代码,并调用上面的showToolbar
方法:
// 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];
感谢@Midhun MP,我意识到我做错了什么。我没有尝试使用属性,而是需要将 toolBar
和 webView
设置为全局变量:
UIToolbar *toolBar;
UIWebView *webView;
而不是像这样创建 toolBar
和 webView
:
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
时,toolBar
和 webView
都从超级视图中删除了。