2013-04-06 6 views
5

ile çalışmaz Storyboard kullanarak bir Tab Bar Denetleyicisi uygulamasına sahibim. Her sekmenin bir UIWebview vardır. Bağlantının harici bir bağlantı olması durumunda (eğer sitem değilse) kullanıcı Webview üzerindeki bağlantıyı tıklattığında bağlantıyı yakalamak istiyorum. Bağlantıyı farklı bir UIViewControl içinde açmak istiyorum. (bir popupi Twitter iphone uygulaması gibi) bunu yapabilirsiniz. Bağlantıyı yakalamak için bu kodu aldım (eğer bağlantı bing.com ise başka bir kontrolör açmalıysa) fakat başka bir UIViewController açamıyorum (bu durumda PopViewController).pushViewController, TabbarController

'GundemViewController' için Görünür @interface seçici beyan 'pushViewController: animasyonlu:'

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 

//CAPTURE USER LINK-CLICK. 

NSURL *url = [request URL]; 

NSString *urlString = [url absoluteString]; 

/****** 
UIWebViewNavigationTypeLinkClicked: When user click on a link in the app it senses the action 
*/ 

if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
    if ([urlString hasPrefix:@"http://www.bing.com/"]) { 

     PopViewController *popUpView = [[PopViewController alloc] initWithNibName:@"PopupViewController" bundle:nil]; 

     [self pushViewController:popUpView animated:YES]; 
     return NO; 
    } 
} 


return YES; 
} 

cevap

10

Her sekmede navigasyon denetleyicileri gömmek, böylece yerine edebilirsiniz:

UITabBarController 
    Tab1 View Controller 
    Tab2 View Controller 
    Tab3 View Controller 

Eğer böyle devam

UITabBarController 
    Tab1 Navigation Controller 
     Tab1 View Controller 
    Tab2 Navigation Controller 
     Tab2 View Controller 
    Tab3 Navigation Controller 
     Tab3 View Controller 

ve var. Gezinme denetleyicisi örneğinde yalnızca -pushViewController:animated: numaralı telefonu arayabilirsiniz.

Uygulama temsilcisinde, muhtemelen her görüntü denetleyicinizi ilklendirir, bir diziye yerleştirir ve sonra bu diziyi sekme çubuğu denetleyicisine atarsınız.

UIViewController *tab1Controller = [[MyViewController alloc] initWithNibNamed:@"MyViewController" bundle:nil]; 
UINavigationController *tab1Nav = [[UINavigationController alloc] initWithRootViewController:tab1Controller]; 

// etc 

Sonra oluşturduk navigasyon kontrolörleri için sekme çubuğu denetleyicisi için görünümü denetleyicileri dizi set: Navigasyon denetleyicileri eklemek için, fazladan bir adım var.

Görüntü denetleyicilerinizde, self numaralı telefondan -pushViewController:animated: numaralı telefonu aramak yerine, self.navigationController numaralı telefonu arayın.

düzenleme: Bir gezinme denetleyicisi istemiyorsanız

, sen

[self presentViewController:popUpView 
        animated:YES 
       completion:nil]; 

pop up sunmak için kullanabilirsiniz. Açılır pencerede, kullanıcı kapat düğmesine dokunduğunda, kapatmak için

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

'u kullanın.

+0

Temel olarak bir Tabbarcontroller'ı sahneye sürükleyip bırakıyorum (storyboard) bir pop-up oluşturmaya çalışıyorum (tüm mevcut sekmelerden ve diğer şeylerden ayrı olarak) Sadece bir üst görünüm denetleyicisi oluşturmak istiyorum ve kullanıcı tıkladığında Kapat düğmesi –

+0

Görevi kapatmam gerek. Yukarıdaki düzenlemeleri görün. –

+0

Seamus Herhangi bir fikrin takdir edileceğini biliyorum *** WebKit web'de yakalanmamış bir istisnayı reddettiGörüntüsü: decidePolicyForNavigationAction: request: frame: decisionListener: delegate: NIB paketlenemedi: 'NSBundle (yüklü) ' –

1

GundemViewController nedir Bana bu hata veriyor? Bunun neden UINavigationController yerine self.navigationController'dan döndürültüğüne bakın. Bunu yapmanın bir yolu, görünüm denetleyicisini itmeden hemen önce bir kesme noktası ayarlamak ve ardından self.navigationController çağrıya adım atmaktır.

+0

GundemViewController bir UIViewController olduğunu. Bu bölümü tekrar kontrol edermisin. O kısmı düzenledim. –

+0

Sadece herhangi bir eski görünüm denetleyicisinde '-pushViewController: animated:' diyemezsiniz. Bir "UINavigationController" üzerinde aramanız gerekiyor. Bunu yapmanın en kolay yolu, görünüm denetleyicisinin şu anda içinde bulunduğu gezinme denetleyicisini döndürecek olan 'self.navigationController' işlevini çağırmaktır. –

+0

Ancak bu self.navigationController'ı yaptığımda hiçbir şey olmuyor mu? Çözümü denediğim problem budur. Bir şey mi özledim? bir yöntem mi? –