6
6
// Copyright (c) 2013 Seymour Dev. All rights reserved.
7
7
//
8
8
9
+ #import < MobileCoreServices/MobileCoreServices.h>
9
10
#import " RWebViewController.h"
10
11
11
- @interface RWebViewController ()
12
+ @interface RWebViewController () <UIActionSheetDelegate>
13
+
14
+ @property (nonatomic , strong ) UIWebView *webView;
15
+
16
+ @property (nonatomic , strong ) UIBarButtonItem *cancelButton;
17
+
18
+ @property (nonatomic , strong ) UIBarButtonItem *backButton;
19
+ @property (nonatomic , strong ) UIBarButtonItem *forwardButton;
20
+ @property (nonatomic , strong ) UIBarButtonItem *refreshButton;
21
+ @property (nonatomic , strong ) UIBarButtonItem *stopButton;
22
+ @property (nonatomic , strong ) UIBarButtonItem *moreActionButton;
23
+
24
+ @property (nonatomic , weak ) UIActionSheet *moreActionSheet;
25
+
26
+ - (void )dismiss ;
27
+ - (void )showMoreActionSheet ;
28
+
29
+ - (void )loadStartPage ;
30
+ - (void )refresh ;
31
+ - (void )stopLoading ;
32
+ - (void )goBack ;
33
+ - (void )goForward ;
34
+
35
+ - (void )setButtonWithLoadingStatus : (BOOL )loading ;
36
+ - (void )refreshNavigationButtonStatus ;
37
+
38
+ - (void )cancelButtonPressed : (id )sender ;
39
+ - (void )backButtonPressed : (id )sender ;
40
+ - (void )forwardButtonPressed : (id )sender ;
41
+ - (void )refreshButtonPressed : (id )sender ;
42
+ - (void )stopButtonPressed : (id )sender ;
43
+ - (void )moreActionButtonPressed : (id )sender ;
12
44
13
45
@end
14
46
15
47
@implementation RWebViewController
16
48
49
+ #pragma mark - View control
50
+
51
+ - (void )dismiss
52
+ {
53
+ [self dismissViewControllerAnimated: YES completion: nil ];
54
+ }
55
+
56
+ - (void )showMoreActionSheet
57
+ {
58
+ UIActionSheet *moreActionSheet = [[UIActionSheet alloc ] initWithTitle: nil
59
+ delegate: self
60
+ cancelButtonTitle: NSLocalizedString(@" Cancel" , nil )
61
+ destructiveButtonTitle: nil
62
+ otherButtonTitles: NSLocalizedString(@" Copy link" , nil ), NSLocalizedString(@" Open in Safari" , nil ), nil ];
63
+ self.moreActionSheet = moreActionSheet;
64
+ [moreActionSheet showFromBarButtonItem: self .moreActionButton animated: YES ];
65
+ }
66
+
67
+ #pragma mark - Web view control
68
+
69
+ - (void )loadStartPage
70
+ {
71
+ NSURLRequest *request = [NSURLRequest requestWithURL: self .startURL];
72
+ [self .webView loadRequest: request];
73
+ }
74
+
75
+ - (void )refresh
76
+ {
77
+ [self .webView reload ];
78
+ }
79
+
80
+ - (void )stopLoading
81
+ {
82
+ [self .webView stopLoading ];
83
+ }
84
+
85
+ - (void )goBack
86
+ {
87
+ if (self.webView .canGoBack ) {
88
+ [self .webView goBack ];
89
+ }
90
+ }
91
+
92
+ - (void )goForward
93
+ {
94
+ if (self.webView .canGoForward ) {
95
+ [self .webView goForward ];
96
+ }
97
+ }
98
+
99
+ #pragma mark - Toolbar items control
100
+
101
+ - (void )setButtonWithLoadingStatus : (BOOL )loading
102
+ {
103
+ NSUInteger buttonIndex = ([self .toolbarItems indexOfObject: self .refreshButton] ^ NSNotFound |
104
+ [self .toolbarItems indexOfObject: self .stopButton] ^ NSNotFound ) ^ NSNotFound ;
105
+ NSMutableArray *toolbarItems = self.toolbarItems .mutableCopy ;
106
+ [toolbarItems replaceObjectAtIndex: buttonIndex withObject: (loading ? self .stopButton : self .refreshButton)];
107
+ [self setToolbarItems: toolbarItems animated: NO ];
108
+ }
109
+
110
+ - (void )refreshNavigationButtonStatus
111
+ {
112
+ self.backButton .enabled = self.webView .canGoBack ;
113
+ self.forwardButton .enabled = self.webView .canGoForward ;
114
+ }
115
+
116
+ #pragma mark - Actions
117
+
118
+ - (void )cancelButtonPressed : (id )sender
119
+ {
120
+ [self dismiss ];
121
+ }
122
+
123
+ - (void )backButtonPressed : (id )sender
124
+ {
125
+ [self goBack ];
126
+ }
127
+
128
+ - (void )forwardButtonPressed : (id )sender
129
+ {
130
+ [self goForward ];
131
+ }
132
+
133
+ - (void )refreshButtonPressed : (id )sender
134
+ {
135
+ [self refresh ];
136
+ }
137
+
138
+ - (void )stopButtonPressed : (id )sender
139
+ {
140
+ [self stopLoading ];
141
+ }
142
+
143
+ - (void )moreActionButtonPressed : (id )sender
144
+ {
145
+ [self showMoreActionSheet ];
146
+ }
147
+
148
+ #pragma mark - Life cycle
149
+
17
150
- (id )initWithNibName : (NSString *)nibNameOrNil bundle : (NSBundle *)nibBundleOrNil
18
151
{
19
152
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
@@ -26,7 +159,55 @@ - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
26
159
- (void )viewDidLoad
27
160
{
28
161
[super viewDidLoad ];
29
- // Do any additional setup after loading the view.
162
+
163
+ // Init navigation items.
164
+
165
+ self.cancelButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target: self action: @selector (cancelButtonPressed: )];
166
+
167
+ // Add navigation items.
168
+
169
+ self.navigationItem .leftBarButtonItem = self.cancelButton ;
170
+
171
+ // Init toolbar items.
172
+
173
+ self.backButton = [[UIBarButtonItem alloc ] initWithImage: [UIImage imageNamed: @" NavBack" ] style: UIBarButtonItemStylePlain target: self action: @selector (backButtonPressed: )];
174
+ self.forwardButton = [[UIBarButtonItem alloc ] initWithImage: [UIImage imageNamed: @" NavForward" ] style: UIBarButtonItemStylePlain target: self action: @selector (forwardButtonPressed: )];
175
+ self.refreshButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemRefresh target: self action: @selector (refreshButtonPressed: )];
176
+ self.stopButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemStop target: self action: @selector (stopButtonPressed: )];
177
+ self.moreActionButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemAction target: self action: @selector (moreActionButtonPressed: )];
178
+
179
+ // Add toolbar & toolbar items.
180
+
181
+ self.navigationController .toolbarHidden = NO ;
182
+ UIBarButtonItem *fixedSpaceItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemFixedSpace target: nil action: nil ];
183
+ fixedSpaceItem.width = 12 .0f ;
184
+ UIBarButtonItem *flexibleSpaceItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target: nil action: nil ];
185
+ self.toolbarItems = @[
186
+ fixedSpaceItem,
187
+ self .backButton,
188
+ flexibleSpaceItem,
189
+ self .forwardButton,
190
+ flexibleSpaceItem,
191
+ self .refreshButton,
192
+ flexibleSpaceItem,
193
+ self .moreActionButton,
194
+ fixedSpaceItem
195
+ ];
196
+ [self refreshNavigationButtonStatus ];
197
+
198
+ // Init & add web view.
199
+
200
+ self.webView = [[UIWebView alloc ] initWithFrame: self .view.bounds];
201
+ self.webView .delegate = self;
202
+ self.webView .scalesPageToFit = YES ;
203
+ [self .view addSubview: self .webView];
204
+ }
205
+
206
+ - (void )viewDidAppear : (BOOL )animated
207
+ {
208
+ [super viewDidAppear: animated];
209
+
210
+ [self loadStartPage ];
30
211
}
31
212
32
213
- (void )didReceiveMemoryWarning
@@ -35,4 +216,48 @@ - (void)didReceiveMemoryWarning
35
216
// Dispose of any resources that can be recreated.
36
217
}
37
218
219
+ #pragma mark - Web view delegate
220
+
221
+ - (void )webViewDidStartLoad : (UIWebView *)webView
222
+ {
223
+ if (webView == self.webView ) {
224
+ [self setButtonWithLoadingStatus: YES ];
225
+ [self refreshNavigationButtonStatus ];
226
+ }
227
+ }
228
+
229
+ - (void )webViewDidFinishLoad : (UIWebView *)webView
230
+ {
231
+ if (webView == self.webView ) {
232
+ [self setButtonWithLoadingStatus: NO ];
233
+ [self refreshNavigationButtonStatus ];
234
+ }
235
+ }
236
+
237
+ - (void )webView : (UIWebView *)webView didFailLoadWithError : (NSError *)error
238
+ {
239
+ if (webView == self.webView ) {
240
+ [self setButtonWithLoadingStatus: NO ];
241
+ [self refreshNavigationButtonStatus ];
242
+ }
243
+ }
244
+
245
+ #pragma mark - Action sheet delegate
246
+
247
+ - (void )actionSheet : (UIActionSheet *)actionSheet didDismissWithButtonIndex : (NSInteger )buttonIndex
248
+ {
249
+ if (actionSheet == self.moreActionSheet ) {
250
+ switch (buttonIndex) {
251
+ case 0 : // Copy link
252
+ [[UIPasteboard generalPasteboard ] setValue: self .webView.request.URL forPasteboardType: (NSString *)kUTTypeURL ];
253
+ break ;
254
+ case 1 : // Open in Safari
255
+ [[UIApplication sharedApplication ] openURL: self .webView.request.URL];
256
+ break ;
257
+ default :
258
+ break ;
259
+ }
260
+ }
261
+ }
262
+
38
263
@end
0 commit comments