生活随笔
收集整理的這篇文章主要介紹了
iOS之给WebView导航栏添加“返回”与“关闭”按钮
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、需求說明
- 在iOS開發(fā)中,不免有原生與H5的交互,比如說:從原生頁面的一個(gè)按鈕,點(diǎn)擊之后跳轉(zhuǎn)到了一個(gè)H5的頁面A,A頁面中又有一個(gè)按鈕,點(diǎn)擊之后,又加載了一個(gè)新的H5頁面B,從B點(diǎn)擊一個(gè)按鈕,又加載一個(gè)新的H5頁面C,如果此時(shí)我們點(diǎn)擊左上角的返回按鈕,會(huì)直接返回到我們的原生頁面。這樣的話,用戶的體驗(yàn)很不好,我們需要對(duì)WebView進(jìn)行添加按鈕事件的處理。
- 此時(shí),想要重新定制返回按鈕,想要從C頁面判斷是否還有上一級(jí)H5頁面可供返回,如果有上一級(jí)頁面還是H5,點(diǎn)擊左上角的返回則返回到B頁面,并且在B頁面的左上角加上一個(gè)關(guān)閉按鈕,這個(gè)關(guān)閉按鈕的作用主要是為了關(guān)閉所有的H5的頁面,直接返回到原生的頁面;如果不點(diǎn)擊關(guān)閉按鈕,還是點(diǎn)擊返回,則從B頁面返回到A頁面;再次點(diǎn)擊返回,則關(guān)閉了H5的頁面,回到了原生的頁面。
二、實(shí)現(xiàn)
@property (nonatomic,strong,readwrite) UIWebView *announceWebView;- (UIWebView *)announceWebView {if (!_announceWebView) {_announceWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, deviceScreenWidth, deviceScreenHeight)];_announceWebView.backgroundColor = MAIN_VIEW_COLOR;_announceWebView.scalesPageToFit = YES;_announceWebView.allowsInlineMediaPlayback = YES;_announceWebView.mediaPlaybackRequiresUserAction = YES;[self.view addSubview:self.announceWebView];}return _announceWebView;
}
- 其次,在導(dǎo)航欄的左邊添加一個(gè)自定義返回按鈕和關(guān)閉按鈕:
@property (nonatomic,strong,readwrite) UIBarButtonItem *returnButton;
@property (nonatomic,strong,readwrite) UIBarButtonItem *closeItem;- (UIBarButtonItem *)returnButton {if (!_returnButton) {_returnButton = [[UIBarButtonItem alloc] init];UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];UIImage *image = [UIImage imageNamed:@"fanhui.png"];[button setImage:image forState:UIControlStateNormal];//這是一張“<”的圖片[button setTitle:@" 返回" forState:UIControlStateNormal];[button addTarget:self action:@selector(respondsToReturnToBack:) forControlEvents:UIControlEventTouchUpInside];[button.titleLabel setFont:[UIFont systemFontOfSize:17]];[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[button sizeToFit];button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;button.contentEdgeInsets = UIEdgeInsetsMake(0, -15, 0, 0);button.frame = CGRectMake(20, 0, 40, 40);_returnButton.customView = button;self.navigationItem.leftBarButtonItem = _returnButton;}return _returnButton;
}- (UIBarButtonItem *)closeItem {if (!_closeItem) {_closeItem = [[UIBarButtonItem alloc] initWithTitle:@"關(guān)閉" style:UIBarButtonItemStyleDone target:self action:@selector(respondsToReturnToFind:)];}return _closeItem;
}
- (void)respondsToReturnToBack:(UIButton *)sender {// 判斷當(dāng)前的H5頁面是否可以返回if ([self.announceWebView canGoBack]) {// 如果可以返回,則返回到上一個(gè)H5頁面,并在左上角添加一個(gè)關(guān)閉按鈕[self.announceWebView goBack];self.navigationItem.leftBarButtonItems = @[self.returnButton, self.closeItem];} else {// 如果不可以返回,則直接:[self.navigationController popViewControllerAnimated:YES];}
}- (void)respondsToReturnToFind:(UIBarButtonItem *)sender {[self.navigationController popViewControllerAnimated:YES];
}
- 最后再用[self.announceWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:API_URL_ANNOUNCEMENT]]]加載出WebView界面內(nèi)容以及實(shí)現(xiàn)相關(guān)的代理即可。
總結(jié)
以上是生活随笔為你收集整理的iOS之给WebView导航栏添加“返回”与“关闭”按钮的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。