-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathWebViewController.m
127 lines (98 loc) · 3.41 KB
/
WebViewController.m
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
#import "WebViewController.h"
@implementation WebViewController
@synthesize webView;
- (void)dealloc; {
Release(loadAddress);
Release(webView);
Release(toolbar);
Release(backButton);
Release(forwardButton);
[super dealloc];
}
- (id) initWithAddress: (NSString*) theAddress; {
self = [self initWithNibName: @"WebViewController" bundle: nil];
loadAddress = [theAddress retain];
return self;
}
- (void)viewWillAppear:(BOOL)animated; {
[self.navigationController setNavigationBarHidden:NO animated:YES];
[webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: loadAddress]]];
addressField.text = loadAddress;
[super viewWillAppear:animated];
}
- (void)viewDidLoad; {
self.navigationItem.titleView = titleAndAddressView;
forwardButton.enabled = NO;
[super viewDidLoad];
}
- (void)viewDidUnload; {
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
#pragma mark -
- (void) updateButtons; {
backButton.enabled = YES;
forwardButton.enabled = webView.canGoForward;
}
- (void)reloadAction:(id)sender; {
[webView reload];
}
- (BOOL) webView: (UIWebView*) theWebView shouldStartLoadWithRequest: (NSURLRequest*) request navigationType: (UIWebViewNavigationType) navigationType; {
return YES;
}
- (void) webViewDidStartLoad: (UIWebView*) theWebView; {
[self updateButtons];
toolBarItems = [toolbar.items mutableCopy];
[toolBarItems removeObjectAtIndex:4];
[toolBarItems insertObject:fixedSpace atIndex:4];
[toolbar setItems:toolBarItems];
Release(toolBarItems);
spinner.hidden = NO;
[spinner startAnimating];
}
- (void) webViewDidFinishLoad: (UIWebView*) theWebView; {
[self updateButtons];
toolBarItems = [toolbar.items mutableCopy];
[toolBarItems removeObjectAtIndex:4];
[toolBarItems insertObject:reloadButton atIndex:4];
[toolbar setItems:toolBarItems];
Release(toolBarItems);
spinner.hidden = YES;
titleField.text = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
if (EmptyString(titleField.text))
titleField.text = NSLocalizedString(@"Untitled", nil);
if (titleField.alpha == 0) {
[UIView beginAnimations: @"" context: nil];
[UIView setAnimationDuration: 0.4];
CGRect frame;
titleField.alpha = 1;
frame = [titleField frame];
frame.origin.y = 3;
titleField.frame = frame;
frame = [addressField frame];
frame.origin.y = 20;
addressField.frame = frame;
addressField.text = [webView.request.URL absoluteString];
[UIView commitAnimations];
}
}
- (void) webView: (UIWebView*) webView didFailLoadWithError: (NSError*) error; {
[self updateButtons];
}
#pragma mark -
- (void) goBack: (id) sender; {
if (webView.canGoBack)
[webView goBack];
else
[self.navigationController popViewControllerAnimated: YES];
}
- (void) action: (id) sender; {
UIActionSheet* sheet = [[[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: NSLocalizedString(@"Cancel", nil) destructiveButtonTitle: nil otherButtonTitles: NSLocalizedString(@"Open in Safari", nil), nil] autorelease];
[sheet showInView: [webView window]];
}
- (void) actionSheet: (UIActionSheet*) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex; {
if (buttonIndex == 0)
[[UIApplication sharedApplication] openURL: webView.request.URL];
}
@end