iOS 301Başlangıç seviyesi derslerde iOS uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

Uygulama İçinde Web Sitelerini Açmak (WebView)

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 12.09.2019 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c-webview obj-c-webview-uzerinden-websitesi-acmak ios

Eğer uygulamanızda hibrid bir yapı varsa (örneğin, belli sayfaları mobil uyumlu bir web sitesinden çağırıyorsanız) ya da kullanıcıyı uygulamayı kapatmadan bir web sitesine yönlendirmek istiyorsanız (örneğin bir haber uygulamasında tam haberi orjinal linkten gösterme) UIWebView komponenti size yardımcı olacaktır. Burada uzak bir sunucuda yer alan bir web sitesini görüntüleyebileceğimiz gibi uygulamanın içinde yer alan html sayfaları da gösterebiliriz.

UIWebView kullanmaya başlamadan önce Interface Builder dosyasını açarak UIWebView içeren bir ekran oluşturuyoruz:
 

Burada sağ yukarıda görünen seçeneklerden bahsedersek;

  • Scaling: Eğer web sitesi cihazın ekran boyutlarından daha büyükse sitenin tamamı ekranda görüntülenemez ve kullanıcının manuel olarak diğer taraflara geçmesi gerekir. Scales Page To Fit seçeneği site boyutlarını değiştirerek ekrana sığmasını sağlayacaktır.
  • Detection: Web sitesi içerisinde yer alan metinlerde geçen adres, telefon numarası, link gibi özelliklerin kullanlabilir olmasını istiyorsanız bu seçeneği seçmeniz gerekir. Örneğin, web sitesinde bir telefon numarası varsa ve siz Phone Numbers seçeneğini aktif hale getirdiyseniz kullanıcı telefon numarasına tıkladığında iPhone numarayı arayacaktır.


Şimdi ViewController.h dosyasına girip UIWebView ile ilgili tanımlamaları yapalım:

 

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (nonatomic, retain) IBOutlet UIWebView *webview;

@end

 

 

Bir sonraki adımda ise Interface Builder içinde UIWebView bağlantısını yapmamız gerekiyor. Burada UIWebViewDelegate kullanmamızın sebebi ise UIWebView’in herhangi bir sayfa çağırırken arka planda gerçekleştirdiği işlemleri takip etme ya da müdahale etme isteğimizden kaynaklanıyor. Şimdi Interface Builder tanımlarını yapalım;

 

delegate ve webview tanımlamalarını yaptıktan sonra UIWebView’in bir siteyi yüklemesine başlayabiliriz. Şimdi kodun içerisinde viewDidLoad metoduna gelerek aşağıdaki satırları ekleyelim.

 

- (void)viewDidLoad
{
    [super viewDidLoad];
    [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://gelecegiyazanlar.org"]]];
}

 

 

loadRequest metodu belirtilen adresin UIWebView’de görüntülenmesini sağlar. Bu uzaktaki bir web sunucu olabileceği gibi lokalde yer alan bir HTML dosyası da olabilir. Yukarıdaki örnekte https://gelecegiyazanlar.org adresinin çağırıldığını görüyoruz.

Turkcell ana sayfası

 

UIWebViewDelegate içerisinde yer alan metotlar ise sayfanın yüklenmesi sırasında gerçekleşen işlemleri takip etmemize ve gerektiğinde müdahale etmemize yardımcı olur. Bu metotlara göz atarsak;

  • (void)webViewDidStartLoad:(UIWebView *)webView

UIWebView bir web sitesini açmaya başladığında harekete geçer. loadRequest metodu çağırıldığında işleme başlar.
 

  • (void)webViewDidFinishLoad:(UIWebView *)webView

UIWebView, bir web sitesini açma işlemini bitirdiğinde harekete geçer. Site başarılı bir şekilde yüklendiğinde çağırılır.
 

  • (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

Eğer UIWebView herhangi bir sebepten ötürü belirtilen web sitesini açamazsa bu metot uyarılır. Hatanın sebebi de error değişkeni üzerinden bildirilir.

 

Aşağıdaki kodu ViewController.m dosyasına eklediğimizde UIWebView’ın hareketlerine göre konsolda birtakım kayıtlar yer alacaktır. Biz burada sitenin yüklenmesini takip amaçlı olarak webViewDidStartLoad ve webViewDidFinishLoad metotlarını konsola yazdırdık.

 

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"webViewDidStartLoad");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"webViewDidFinishLoad");
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"didFailLoadWithError");
}