How do I extract a URL within a UITextView in Xcode? - ios

I'm trying to use the UITextView delegate method(textView:shouldInteractWithURL:inRange:) to override the default behavior of links in my textView opening in Safari.
I know I should create the webView I want to instantiate and pass the URL to it, but I don't know how to pass the URL to the webView.
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
//Do something with the URL
NSURL *url = [[NSURL alloc] initWithString:self.sourceInformation.text.?];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
WebViewController *sourceWebViewController = [[self storyboard] instantiateViewControllerWithIdentifier:#"WebViewController"];
[sourceWebViewController.webView loadRequest:request];
sourceWebViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
return NO;
}
Is there some property on UITextView that hold the URL? I looked at the header file but didn't see one.
If anyone can help, thanks.

Try this,
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
[self performSelector:#selector(loadWebView) withObject:nil afterDelay:1] ;
return NO;
}
-(void)loadWebView
{
NSURL *url = [[NSURL alloc] initWithString:self.sourceInformation.text.?];
if([[UIApplicaiton sharedApplication] canOpenURL:url])
{
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
WebViewController *sourceWebViewController = [[self storyboard] instantiateViewControllerWithIdentifier:#"WebViewController"];
[sourceWebViewController.webView loadRequest:request];
sourceWebViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
}
else
{
NSLog(#"Can not open the URL, check the URL") ;
}
}

Related

How can i get the alert in click of submit?

How can i get the alert in click of submit ?
i am using WebView..
Here is the code
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[webView setDelegate:self];
NSString *urlAddress = #“sssssss”;
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
[self.view addSubview:webView];
Thanks in Advance..
Check this:
- (BOOL)webView: (UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType {
NSString *fragment, *scheme;
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
//1
[webView stopLoading];
fragment = [[request URL] fragment];
scheme = [[request URL] scheme];
if ([scheme isEqualToString: #"file"] && [self respondsToSelector: NSSelectorFromString(fragment)]) {
[self performSelector: NSSelectorFromString(fragment)];
return NO;
}
[[UIApplication sharedApplication] openURL: [request URL]];
}
return YES;
}
You need to set delegate to WebView.
Hope this helps.
1 - Add a IBAction to your submit button.
2 - Inside the method that gets called use UIAlertController to create a alert that will be displayed when the button is clicked.

shouldStartLoadWithRequest not working in iOS

I'm trying to override a url with the following code:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSString *urlString = #"http://www.google.com/";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[_udazzWebView loadRequest:urlRequest];
NSLog(#"log");
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(#"log2");
//use NSURLRequest object request , to manage the request.
NSURL *urL=request.URL;
NSString *urlStr=[urL absoluteString];
NSLog(#"URLL %#",urlStr);
if([urlStr isEqualToString:#"PostPicPopUp"]){
NSLog(#"log3");
}
return YES;
}
Log2 doesn't appear in the console. I'm guessing it has something to do with replacing NSURLRequest in the viewDidLoad, but I don't know how to do it.
It seems to me you are just missing UIWebView delegates init like
- (void)initWebViewWithRect:(CGRect)rect {
self.webView = [[UIWebView alloc] initWithFrame:rect];
self.webView.backgroundColor = [UIColor whiteColor];
self.webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.webView.opaque=NO;
self.webView.userInteractionEnabled=YES;
self.webView.delegate=self;
[self cleanSubViews];
}
You UIWebView should be defined like
#interface MXMBaseWebView()<UIWebViewDelegate, UIScrollViewDelegate, MXMWebViewProgressDelegate> {
CAGradientLayer *shadowLayer;
MXMWebViewProgressView *_progressView;
MXMWebViewProgress *_progressProxy;
UIRefreshControl *_refreshControl;
}
#property(nonatomic, strong) UIWebView *webView;
#end
so you will do calls like
[self.webView loadRequest: [NSURLRequest requestWithURL:url]];
At this point everything should work properly.

Maps not being shown in webview- iOS

I have a button in my view. On clicking it leads to a webview in which I want to show the maps. The code I am using is:
- (void)viewWillAppear:(BOOL)animated{
NSString *url = [#"http://maps.apple.com/?q=" stringByAppendingString:self.address];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
NSURLRequest *metricsRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
_webViewForLocation.delegate = self;
[_webViewForLocation loadRequest:metricsRequest];
NSLog(#"Maps String: %#", url);
}
But the webview is blank. HOw do I show maps in it?
try
- (void)viewDidLoad
{
[super viewDidLoad];
[_webViewForLocation loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"http://maps.google.com/?q=bangalore"]]]]; // here pass your string
- (void)webViewDidStartLoad:(UIWebView *)webView
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
the output is
refers this document,

Basic url not working in WebView

I am learing WebView.
when I do something like
NSString *url = #"www.google.com";
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
it fails.
But when I type www.google.com (or even google.com) in standard browser, it works fine.
I also noticed that after loading the page, the url text field in standard browser changes the link from www.google.com to https:// www. google.co.in/?gws_rd=ssl
In above code when I set NSString *url = #"https://www.google.co.in/?gws_rd=ssl" it works fine
So how do I implement my WebView view so that if should work like a standard browser it terms of above context
UIWebView always needs http or https when starting request, if you click on links inside the webView it will handle it itself. So here is how to handle it:
- (void)viewDidLoad
{
[super viewDidLoad];
UITextField *addressBar = [[UITextField alloc] init];
[addressBar setDelegate:self];
[self loadRequestFromString:#"www.google.com"];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self loadRequestFromString:textField.text];
[textField resignFirstResponder];
return YES;
}
- (void)loadRequestFromString:(NSString *)urlString
{
NSURL *webpageUrl;
if ([urlString hasPrefix:#"http://"] || [urlString hasPrefix:#"https://"]) {
webpageUrl = [NSURL URLWithString:urlString];
} else if ([urlString containsString:#" "] || ![urlString containsString:#"."]) {
webpageUrl = [NSURL URLWithString:[NSString stringWithFormat:#"http://www.google.com/search?q=%#", [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
} else {
webpageUrl = [NSURL URLWithString:[NSString stringWithFormat:#"http://%#", urlString]];
}
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:webpageUrl];
[_webView loadRequest:urlRequest];
}
to open any URL in UIWebView you should add url with protocol
eg #"http://www.google.com".
[NSURL URLWithString:#"http://www.google.com"];
then it will work.

How to redirect UIWebview?

I am new to iPhone development and I want to move to UIWebview based on the URL when the user clicks on a particular row (Google,Facebook,Yahoo). I want the page to redirect to the UIWebview.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:#"URL"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
statuses = [parser objectWithString:json_string error:nil];
if (indexPath.row == 0) {
//What do i write in here
} else if(indexPath.row == 1) {
} else if(indexPath.row == 2) {
} else {
}
}
Can anyone help me?
If a webView is managed by the same ViewController (so the ViewController has a property like this):
#property (nonatomic, retain) UIWebView *webView;
then you can open a link like so:
NSURL *url = [NSURL URLWithString:#"http://your-url-goes-here.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
However if the webView is managed by another ViewController than you have to pass a link to that ViewController and then trigger a segue.
A common approach is to set viewController's property to pass a link.
For example in WebViewController.h
...
#property (nonatomic, copy) NSString *linkToOpen; //My fantasy isn't really working right now :)
...
in WebViewController.m
...
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [[[NSURL alloc] initWithString:self.linkToOpen] autorelease];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
...
And a segue from your ViewController to the WebViewController has an identifer #"myTestSegue" then you can do it like so:
WebViewController *webViewController = [[WebViewController alloc] initWithStyle:/*I don't honestly remember what to write here, sorry :(*/];
webViewController.linkToOpen = #"your link goes here. You can assign it inside a switch operator.";
[self.navigationController pushViewController:webViewController animated:YES];
[webViewController release];
The code is incomplete and probably incorrect somewhere, but I hope that it will help you to achieve your goals.
You have to create a new controller and navigate to that controller on click. Also you have to pass link to another controller for load the url in to webview.

Resources