这样来写布局
一个TitleView作为顶部搜索栏:
@implementation TitleView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self initTilte];
}
return self;
}
-(void)initTilte{
UITextField* field = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 230, 30)];
_textField = field;
_textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;//自动调整自己的位置,使自己的左边距和右边距和superview保持不变
_textField.enablesReturnKeyAutomatically = YES; //使return在输入时可以使用
_textField.placeholder = @"please input:"; //设置hint的值
_textField.textAlignment = NSTextAlignmentLeft; //文字靠左显示
_textField.borderStyle = UITextBorderStyleNone; //没有边框
_textField.font = [UIFont systemFontOfSize:18.0f]; //设置字体大小
_textField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
_textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; //这两个使文字会居中显示
_textField.clearButtonMode = UITextFieldViewModeWhileEditing; //当输入时有clear button
UIImage* image = [[UIImage imageNamed:@"text_field_bg.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0]; //stretchableImageWithLeftCapWidth使图片有拉伸效果
_textField.delegate = self; //给textField设置代理
_textField.background = image; //背景设置
_textField.leftViewMode = UITextFieldViewModeAlways;
[_textField setText:@"http://m.baidu.com"];
CGRect frame = [_textField frame];
frame.size.width = 15;
UIView* view1 = [[UIView alloc] initWithFrame:frame];
_textField.leftView = view1; //上面几句话设置文字跟textField的左边有些距离
[self addSubview:_textField];
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; //init一个button,可以自定义背景
[button setBackgroundImage:[[UIImage imageNamed:@"cancel_but_bg.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0] forState:UIControlStateNormal];
button.frame = CGRectMake(260,10, 49, 30); //设置button的背景,有normal和highlight两种状态
[button setBackgroundImage:[[UIImage imageNamed:@"cancel_but_bg2.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:0] forState:UIControlStateHighlighted];
[button setTitleColor:[CCommon RGBColorFromHexString:@"#333333" alpha:1.0f] forState:UIControlStateNormal];
[button setTitleColor:[CCommon RGBColorFromHexString:@"#000000" alpha:1.0f] forState:UIControlStateHighlighted]; [button addTarget:self action:@selector(onclick) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"搜索" forState:UIControlStateNormal];
<strong> button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;//这个让button字体周边有自适应的margin</strong>
[self addSubview:button];
[button addTarget:self action:@selector(onclick) forControlEvents:UIControlEventTouchUpInside];
UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320,2)];
view.backgroundColor = [UIColor grayColor];
[self addSubview:view];
}
-(void)resignTextField{
[_textField resignFirstResponder];
}
-(void)onclick{
[_customUiWebViewController onclick];//让controller执行搜索页面的操作
}
viewcontroller的viewdidload:
- (void)viewDidLoad
{
[super viewDidLoad];
_titleView = [[TitleView alloc] initWithFrame:[[CustomUiWebViewUIManager sharedInstance] getSearchBarView]];
_titleView.customUiWebViewController = self;
[self.view addSubview:_titleView];
// Do any additional setup after loading the view.
CustomWidgetUiWebView* tView = [[CustomWidgetUiWebView alloc] initWithFrame:
[[CustomUiWebViewUIManager sharedInstance] getWebViewFrameBySearchResultView]];
self.customWidgetUiWebView = tView;
[self.customWidgetUiWebView setOpaque:NO];
[self.customWidgetUiWebView setBackgroundColor:[UIColor whiteColor]];
[self.customWidgetUiWebView setDelegate:self];
self.customWidgetUiWebView.scalesPageToFit = YES;
self.customWidgetUiWebView.detectsPhoneNumbers = NO;
// NSURL* url = [NSURL URLWithString:@"http://m.baidu.com"];
// NSURLRequest* request = [NSURLRequest requestWithURL:url];
// [self.customWidgetUiWebView loadRequest:request];
<strong> NSArray* arr = [self.customWidgetUiWebView subviews];
UIScrollView* sView = [arr objectAtIndex:0];
[sView setOpaque:NO];
[sView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"webview_bg.png"]]];
//这个把webview的sub view的scrollview的透明度设为不透明,并加上背景
sView.delegate = self;</strong>
WebToolBarController* tmpWebToolBarController = [[WebToolBarController alloc] init];//这个是底下的toolbar
self.webToolBarController = tmpWebToolBarController;
[_webToolBarController loadWebViewToolBar];
[self.view addSubview:_customWidgetUiWebView];
_webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarFrame];
[self.view addSubview:_webToolBarController.webToolBar];
self.webToolBarController.delegate = self;
<strong> [self startUpdateButtonStatusTimer]; //这个是起了一个timer来更新back和forward的状态</strong>
CGRect iconRc = [[CustomUiWebViewUIManager sharedInstance] getFullScreenBtnFrame];
UIButton* curBtn = [[UIButton alloc] initWithFrame:iconRc];
[curBtn setImage:[UIImage imageNamed:@"fullScreen.png"] forState:UIControlStateNormal];
[curBtn setImage:[UIImage imageNamed:@"fullScreen_touch.png"] forState:UIControlStateHighlighted];
[curBtn addTarget:self action:@selector(fullScreenBtnClick:) forControlEvents:UIControlEventTouchUpInside];
curBtn.alpha = 0;
self.fullScreenBtn = curBtn;
[self.view addSubview:curBtn];
}
-(void)startUpdateButtonStatusTimer{
[self freeUpdateButtonStatusTimer];
NSDate* tmpDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5];
NSTimer* tmpTimer = [[NSTimer alloc] initWithFireDate:tmpDate interval:10.0 target:self selector:@selector(UpdateButtonStatusTimerFired:) userInfo:nil repeats:YES]; <strong>//0.5s以后执行<span style="font-family: Arial, Helvetica, sans-serif;">UpdateButtonStatusTimerFired,并且10.0s再重复执行</span></strong>
self.updateStatusBarTimer = tmpTimer;
[[NSRunLoop currentRunLoop] addTimer:_updateStatusBarTimer forMode:NSDefaultRunLoopMode];
}
- (void)UpdateButtonStatusTimerFired:(id)sender
{
[self updateToobarButtonStatusByWebView];
//[self freeUpdateButtonStatusTimer];
}
- (void)updateToobarButtonStatusByWebView{
if (![_customWidgetUiWebView isLoading]) {
return;
}
[_webToolBarController setItem:ITEM_BACK enabled:[_customWidgetUiWebView canGoBack]];
[_webToolBarController setItem:ITEM_FORWARD enabled:[_customWidgetUiWebView canGoForward]];
}
如果执行全屏和离开全屏的操作:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
CGFloat screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
NSArray* arr = [self.customWidgetUiWebView subviews];
UIScrollView* sView = [arr objectAtIndex:0];
if (sView.contentSize.height < screenHeight) { //如果webview的内容区域小于屏幕高度,则不执行全屏操作
return;
}
if (self.customWidgetUiWebView.widgetEmbedStatus == ENoWidgetEmbed){
NSLog(@"====y=%f",sView.contentOffset.y);
if (sView.contentOffset.y >= SearchBar_Height &&
sView.contentOffset.y < sView.contentSize.height-screenHeight) {//contentOffset<span class="s1" style="font-family: Arial, Helvetica, sans-serif;">是当前显示的区域的</span><span style="font-family: Arial, Helvetica, sans-serif;">origin</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">相对于整个</span><span style="font-family: Arial, Helvetica, sans-serif;">scrollView</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">的</span><span style="font-family: Arial, Helvetica, sans-serif;">origin</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">的位置,如果大于SearchBar_Height,并且小于底部
</span>
if (isFullScreenMode) {
return;
}else{
[self goToFullScreenMode];
}
}else if(isFullScreenMode) {
[self exitFullScreenMode];
}
}
}
-(void)goToFullScreenMode{
[UIView beginAnimations:@"FullScreenMode" context:NULL];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
_webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarHideFrame];
[UIView commitAnimations];
_titleView.frame =[[CustomUiWebViewUIManager sharedInstance] getSearchBarViewFullView];
_customWidgetUiWebView.frame = [[CustomUiWebViewUIManager sharedInstance] getWebViewFrameByFullScreenView];
//shwo button
[UIView beginAnimations:@"animationID" context:NULL];
[UIView setAnimationDuration:0.5f];
_fullScreenBtn.alpha = 1;
[UIView commitAnimations];
isFullScreenMode = YES;
[_titleView resignTextField];
}
-(void)exitFullScreenMode{
[UIView beginAnimations:@"NotScreenMode" context:NULL];
[UIView setAnimationDuration:0.2f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[SearchBarViewController sharedInstance].view.frame =
[[SearchBarUIManager sharedInstance] searchBarViewFrame];
_webToolBarController.webToolBar.frame = [[WebToolBarUIManager sharedInstance] webToolBarFrame];
if (!isBtnClickAni) {
_customWidgetUiWebView.frame = [[CustomUiWebViewUIManager sharedInstance] getWebViewFrameBySearchResultView];
_titleView.frame = [[CustomUiWebViewUIManager sharedInstance] getSearchBarView];
}
[UIView commitAnimations];
[UIView beginAnimations:@"animationID" context:NULL];
[UIView setAnimationDuration:0.5f];
_fullScreenBtn.alpha = 0;
[UIView commitAnimations];
isFullScreenMode = NO;
}
- (void)fullScreenBtnClick:(id)sender {
// isBtnClickAni = YES;
[self exitFullScreenMode];
// isBtnClickAni = NO;
}
gosafari的代码:
- (void)goSafari
{
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:NSLocalizedString(@"String_QueryOpBySafari", nil)
delegate:self
cancelButtonTitle:NSLocalizedString(@"String_Cancel", nil)
destructiveButtonTitle:nil
otherButtonTitles:NSLocalizedString(@"String_OpBySafari", nil),nil];
[actionSheet showInView:self.view];
}
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex==0)
{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:[_customWidgetUiWebView stringByEvaluatingJavaScriptFromString:@"document.URL"]]])
{
[[CCommon sharedInstance ]appOpenUrl:[_customWidgetUiWebView stringByEvaluatingJavaScriptFromString:@"document.URL"]];
}
else
{
[[CCommon sharedInstance ]appOpenUrl:[[_customWidgetUiWebView.request URL]absoluteString]];
}
}
}
效果图: