objective-c turn parsed html elements into links in UITableViewCell - html

I followed the tutorial here:
http://www.raywenderlich.com/14172/how-to-parse-html-on-ios
One of the challenges was to then:
"Make the phone open Safari to that tutorial’s or contributor’s URL when you tap on each row?"
How would I do this to make the dynamic parsed data the link of each UITableViewCell?
What would the difference in code be between opening in a browser and opening within the app?
Thanks in advance.

To Open URL in Safari you need to:
1. Create string with URL.
NSString *urlString =#"http://www.google.com";
2. Open it with this method of UIApplication
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];
OR
If you want to open link inside you app you need.
1. Create WebView and set it delegate(optional if you want to control load process).
UIWebView *webView =[[UIWebView alloc] initWithFrame:CGRectInset(self.view.frame, 10, 10)];
2. Create URL request
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
3. Add WebView as a subview
[self.view addSubview:web view];
4. Load you request
[webView loadRequest:request];

Try
[[UIApplication sharedApplication] openURL:tutorialURL];

Related

WebView not loading an HTML file properly

I have a UIWebView in which I want to load an HTML file from an URL. This is the code I use to load the file with WebView :
NSURLRequest* blogRequest = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:self.url]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:5.0];
[self.webView setDelegate:self];
[self.webView loadRequest:blogRequest];
The file I want to load (let's say http://example.com/foo.html) is nothing special, just plain text with basic HTML tag in it. The WebView is working properly for normal website, like google.com, but not my custom HTML file. All I get is an empty document.
webViewDidFinishLoad is never reach.
If I load my HTML file locally from my project, there is no problem. So, why isn't it working when downloading from internet? I have absolutely no clue.
Do you have a super slow network and your 5 second timeout is expiring?
Or, are you implementing a delegate method that is blocking the request?
Try this, it works for me:
NSString *URLString = #"http://example.com/foo.html";
NSURL *URL = [NSURL URLWithString:URLString];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[self.webView loadRequest:request];

iOS webView not loading mobile optimised page

I am submitting user details to a local server (POST Request) which then makes a call to payment gateway called ----> PayU .Now the response that I get from local server is a url which is a url of payU and I am supposed to load it into webView.Now everything is fine till here.But the problem is that when I load this url in webView, it displays a Desktop optimised page and not a mobile optimised page.
I need to know a workaround if any from iOS end, so that I can load a mobile optimised page.For example will sending HTML form from my webView will help? Or anything else that can be done.
Here is how I load the webView currently.
NSURL *url = [NSURL URLWithString:_urlString]; //I get this url as a response of POST Request to a local server
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.paymentWebView loadRequest:request];
[self.paymentWebView scalesPageToFit];
Swift
The order matters. Switching the order works for me ^^
webView.scalesPageToFit = true
webView.loadRequest(NSURLRequest(URL: NSURL(string: url)!))

Loading external image in local HTML inside UIWebView

I have an NSString containing HTML string with external image URL. For example,
NSString *HTMLString = #"<p><img src="http://www.stackoverflow.com/image.jpg" /></p>";
When I use UIWebView to load HTML and present it in my app, the app freeze until the UIWebView done loading the web view.
Is that an issue about the download of image is not asynchronous? I try to find related topic but I can't get the answer.
How to make my image to be downloaded asynchronously?
Background: The HTML string is already loaded asynchronously using AFNetworking. All the text can be shown without loading the image. However, the process of downloading image freezes my app.
I don't really understand what you are trying to do, but if you want to show an image from a URL you can do that easily with a UIImageView like this:
imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:
[NSURL URLWithString:#"http://www.stackoverflow.com/image.jpg"]]];
Or if you want a UIWebView you could do a separate HTML file and load it like this:
NSString *path = [[NSBundle mainBundle] pathForResource:#"myFile" ofType:#"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
[webView setScalesPageToFit:YES];
Or you can test to add tags like html, body etc.
I'm open for more info about your problem.

Offline UIWebView when internet unavailable

I have a UIWebView. When there is internet access I want it to load the actual webpage and when there is no internet I want it to load a saved html complete website file. I implemented a test webView with the local file, and it works perfectly. The code is this:
[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:#"My Website" ofType:#"html"]isDirectory:NO]]];
Of course I synthesized the webview and made it in the .h as well. I also made a normal webview accessing the website online, which is exactly the same except that instead of the above code in the viewDidLoad it says:
NSString *fullURL = #"http://www.mywebsite.com";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:requestObj];
However, when I tried making the webview load the html when no internet was available and the website when internet was available, it worked, but the offline site stopped supporting anything but the main page and lost all its photos (they work fine in the separate view, as described above, just not in the demo offline-online view). I used the following code:
NSURL *scriptUrl = [NSURL URLWithString:#"http://www.mywebsite.com"];
NSData *data = [NSData dataWithContentsOfURL:scriptUrl];
if (data) {
NSLog(#"Device is connected to the internet");
NSString *fullURL = #"http://www.mywebsite.com";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:requestObj];
} else {
NSLog(#"Device is not connected to the internet");
[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:#"My Website" ofType:#"html"]isDirectory:NO]]];
}
In desperation, I tried adding a navigation bar to each of my original views, so that in the offline view you could click the button saying "online" and segue to the online view, and vice versa. This failed miserably: the offline view (which was the initial one) worked fine but when I pressed the "online" button I got the following error:
*** First throw call stack: (0x321cb3e7 0x3a065963 0x321cb0d5 0x32a397d9 0x32a35543 0x321518a5 0x34176e7d 0x341766ff 0x3406f079
0x33ff9451 0x34085357 0x340c6cd9 0x340c5fab 0x341e7da3 0x340c5087
0x340c5111 0x340c5087 0x340c503b 0x340c5015 0x340c48cb 0x340c4db9
0x33fed5f9 0x33fda8e1 0x33fda1ef 0x35cce5f7 0x35cce227 0x321a03e7
0x321a038b 0x3219f20f 0x3211223d 0x321120c9 0x35ccd33b 0x3402e2b9
0x8194d 0x3a492b20) libc++abi.dylib: terminate called throwing an
exception
I tried making the online view be the initial one and the offline one be the secondary one that you click a bar button to get to, and the offline one stopped working. It appears as if the initial view will load, whichever it is, but not the secondary one. Maybe I am incorrectly using bar button items, though I am experienced with storyboarding and have many bar button segues located in the rest of my project. And yes, I did change the names of my web views to be different (myWebView and myOfflineWebView) when implementing the last mentioned bar button solution, after it initially failed, because I thought maybe having two different uiWebViews with the same name, albeit in different viewControllers, might be the problem, but that didn't help.
Any feedback is appreciated. Possibly the code for checking internet availability did not work because it was made for OSX. I found it here. I would prefer not to bog down my project with big libraries (like this one, which is often mentioned) as it had many libraries all ready and is a bit slow. I cannot use the usual Apple Reachability sample project because I am using ARC. I could refactor it but I do not have much time and would prefer a simpler solution, even if it is not 100% perfect or elegant. Thank you!
So, regarding the internet availability, you will want to use this reachability library.
Also, your images and links probably aren't loading because your saved html has absolute urls: http://foo.com/image.jpg which can't be loaded because you have no connection.

Convert a HTML page to a iOS View

i want to take a normal html page (a page from tf2 wiki) and convert it into a view.
For example it should take a text and put it into a label or a Image into an UIImageView.
Is there any Framework to do something like that or should i convert the site on a webserver
to make it easier for the app at runtime to render ?
Hope you understand, what i want to do.
Tim
there could be different ways depending on your scenario, you could load them in UIWebView within IOS, If you don't want show the UIWebView then you can get the html from it ans use it however you want. or other way you could transfer the HTML as json data to IOS and then show that data via UIView, UILabel or anything else. otherwise as suggested by Zakaria, you could use PhoneGap.
UPDATE with sample code for sending a request and getting its contents if you don't want to use UIWebView
//your html page with url
NSURL *url = [NSURL URLWithString:#"www.google.com"];
NSURLRequest *request=[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30.0f];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if ([data length]>0 && error==nil) {
NSString *html=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(#"this string contains all html page you have \n %#",html);
}
}
];
Not sure if i understand the question properly, but Cordova lets you develope iOS apps in html/css/js.
Check their website: http://cordova.apache.org/
If your page is a static one, then use PhoneGap : It will embed your HTML+JS+CSS in an iOS app and will be loaded in a webview.
But there is no framework that will allow you to convert your HTML elements into native ones.