Swift - 使用UIWebView和UIToolbar制作一个浏览器

使用网页控件(UIWebView)与工具栏控件(UIToolbar),我们可以自制一个小型的浏览器,其功能如下:
1,输入网址,点击“Go”按钮加载网页
2,加载过程中有进度条,同时可以点击停止按钮取消加载
3,有页面刷新按钮
4,有前进后退按钮

效果图如下:
原文:Swift - 使用UIWebView和UIToolbar制作一个浏览器


代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
import  UIKit
 
class  ViewController UIViewController UIWebViewDelegate , UITextFieldDelegate  {
     
     @IBOutlet  var  btngo: UIButton !
     @IBOutlet  var  webview: UIWebView !
     @IBOutlet  var  txturl: UITextField !
     var  loadIndicator: UIActivityIndicatorView !
     
     //进度条计时器
     var  ptimer: NSTimer !
     //进度条控件
     var  progBar: UIProgressView !
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         // Do any additional setup after loading the view, typically from a nib.
         
         self .webview.delegate =  self ;
         loadIndicator =  UIActivityIndicatorView (frame:  CGRectMake (100.0, 100.0, 32.0, 32.0));
         loadIndicator.activityIndicatorViewStyle =  UIActivityIndicatorViewStyle . Gray
         self .view.addSubview(loadIndicator);
         
         txturl.delegate =  self
         
         
         //构建浏览器工具条
         setupBrowserToolbar()
         
     }
     func  setupBrowserToolbar()
     {
         // 创建一个浏览器工具条,并设置它的大小和位置
         let  browserToolbar =   UIToolbar (frame: CGRectMake (0, 20, 320, 44))
         
         // 将工具条添加到当前应用的界面中
         self .view.addSubview(browserToolbar)
         
         //创建图片工具条,但是不是直接使用文件名,而是用 NSData 方式初始化 UIImage
         let  path =  NSBundle .mainBundle().pathForResource( "back" , ofType: "png" )
         
         let  urlStr =  NSURL .fileURLWithPath(path!);
         let  data =  NSData (contentsOfURL:urlStr);
         let  btnback =   UIBarButtonItem (image: UIImage (data: data!),
             style:. Plain , target: self ,action: Selector ( "backClicked:" ));
         //第一个分隔按钮
         let  btngap1 =   UIBarButtonItem (barButtonSystemItem:. FlexibleSpace ,
             target: nil ,
             action: nil );
         // 创建前进按钮 UIBarButtonItem
         let  btnforward =  UIBarButtonItem (image: UIImage (named: "forward.png" ),
             style:. Plain , target: self , action: Selector ( "forwardClicked:" ));
         
         // 第二个分隔按钮,创建一个可伸缩的UIBarButtonItem
         let  btngap2 =   UIBarButtonItem (barButtonSystemItem:. FlexibleSpace ,
             target: nil ,
             action: nil );
         
         // 创建重新加载按钮 UIBarButtonItem
         let  btnreload =  UIBarButtonItem (image: UIImage (named: "reload.png" ),
             style:. Plain , target: self , action: Selector ( "reloadClicked:" ));
         
         //第三个分隔按钮
         let  btngap3 =   UIBarButtonItem (barButtonSystemItem:. FlexibleSpace ,
             target: nil ,
             action: nil );
         
         //创建加载停止按钮
         let  btnstop =  UIBarButtonItem (image: UIImage (named: "stop" ),
             style:. Plain , target: self , action: Selector ( "stopClicked:" ));
         
         //第四个分隔按钮
         let  btngap4 =   UIBarButtonItem (barButtonSystemItem:. FlexibleSpace ,
             target: nil ,
             action: nil );
         
         //创建进度工具条
         progBar =  UIProgressView (progressViewStyle: UIProgressViewStyle . Bar )
         
         // 设置UIProgressView的大小
         progBar.frame =  CGRectMake (0 , 0 , 80, 20)
         
         // 设置该进度条的初始进度为0
         progBar.progress = 0
         
         // 创建使用 UIView 的自定义的 UIBarButtonItem
         let  btnprog =   UIBarButtonItem (customView:progBar)
         
         // 为工具条设置工具按钮
         browserToolbar.setItems( [btnback,btngap1, btnforward,btngap2,
             btnreload,btngap3, btnstop,btngap4, btnprog ], animated: true )
         
         //创建计时器对象
         ptimer =  NSTimer .scheduledTimerWithTimeInterval(0.2,
             target: self  ,selector:  Selector ( "loadProgress" ),
             userInfo: nil ,repeats: true );
         ptimer.invalidate()
     }
     
     func  textFieldShouldReturn(textField: UITextField ) ->  Bool
     {
         txturl.resignFirstResponder()
         print ( "url Changed!" )
         let  url = txturl.text;
         loadUrl(url!)
         return  true
     }
     /*
         在 UIWebView 加载指定 URL
     */
     func  loadUrl(url: String )
     {
         let  urlobj =  NSURL (string:url)
         
         let  request =  NSURLRequest ( URL :urlobj!)
         
         webview.loadRequest(request);
     }
     
     func  stopClicked(sender: UIBarButtonItem )
     {
         webview.stopLoading()
     }
     
     func  reloadClicked(sender: UIBarButtonItem )
     {
         webview.reload()
     }
     
     func  backClicked(sender: UIBarButtonItem )
     {
         webview.goBack()
     }
     
     func  forwardClicked(sender: UIBarButtonItem )
     {
         webview.goForward()
     }
     
     @IBAction  func  goClicked(sender: UIButton )
     {
         //收起输入面板
         txturl.resignFirstResponder()
         let  url = txturl.text;
         loadUrl(url!)
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
     
     
     func  webViewDidStartLoad(webView: UIWebView )
     {
         progBar.setProgress(0, animated: false );
         ptimer.fire();
         loadIndicator.startAnimating();
     }
     func  webViewDidFinishLoad(webView: UIWebView )
     {
         loadIndicator.stopAnimating();
         progBar.setProgress(1, animated: true );
         ptimer.invalidate();
     }
     func  loadProgress()
     {
         // 如果进度满了,停止计时器
         if (progBar.progress >= 1.0)
         {
             // 停用计时器
             ptimer.invalidate();
         }
         else
         {
             // 改变进度条的进度值
             progBar.setProgress(progBar.progress + 0.02, animated: true );
         }
     }
     
     func  webView(webView:  UIWebView , didFailLoadWithError error:  NSError ?)
     {
         let  alertController =  UIAlertController (title:  "出错!" ,
             message: error!.localizedDescription,
             preferredStyle:  UIAlertControllerStyle . Alert )
         let  okAction =  UIAlertAction (title:  "确定" , style:  UIAlertActionStyle . Cancel ,
             handler:  nil )
         alertController.addAction(okAction)
         self .presentViewController(alertController, animated:  true , completion:  nil )
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值