2010-02-22 66 views
24

我有一個UIViewController,其中我有一個UITextView從界面構建器中添加。現在我想推一個視圖,當我點擊超鏈接或電話號碼。我能夠使用我在stackoverflow中找到的方法來檢測哪個url被點擊。這裏是方法如何在iPhone SDK中獲取UIView的superView的UIViewController?

@interface UITextView (Override) 
@end 

@class WebView, WebFrame; 
@protocol WebPolicyDecisionListener; 

@implementation UITextView (Override) 

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener 
{ 
    NSLog(@"request: %@", request); 
} 
@end 

現在我想要得到的TextView的上海華盈的的viewController,這樣我可以把其他的viewController,當我在URL /電話號碼點擊。

回答

73

您無法直接訪問它,但你可以通過遍歷響應鏈尋找下一個視圖控制器(如果有的話)。

這是the Three20 framework是怎麼做的:

- (UIViewController*)viewController 
{ 
    for (UIView* next = [self superview]; next; next = next.superview) 
    { 
     UIResponder* nextResponder = [next nextResponder]; 

     if ([nextResponder isKindOfClass:[UIViewController class]]) 
     { 
      return (UIViewController*)nextResponder; 
     } 
    } 

    return nil; 
} 
+0

哇感謝得到的UIViewController。使用three20並不知道。我總是創建一個代表。對於任何有興趣在三年內使用這個的人來說。只需導入'#import「Three20UICommon/UIView + TTUICommon.h」' – choise 2011-05-03 11:39:18

+0

謝謝!它工作完美! – 2013-08-07 23:03:18

+0

你拯救我的一天。它像一個魅力 – 2013-09-12 07:45:09

1

請注意,-webView:decidePolicyForNavigationAction:...是一個未公開的方法(對於iPhoneOS而言,它已記錄在Mac OS X中),如果是AppStore,則該應用可能會被拒絕。


視圖控制器不與視圖關聯。只有相反適用。要訪問視圖控制器,請將其設置爲全局可訪問的變量或屬性。

如果使用接口構建器,通常可以定義連接到導航視圖控制器的應用程序委託的出口。然後你可以使用

MyAppDelegate* del = [UIApplication sharedApplication].delegate; 
[del.the_navigation_view_controller pushViewController:...]; 
0

您可以從UIView的

UIViewController *viewC = (UIViewController *)view->_viewDelegate; 
+0

_viewDelegate是一個私有屬性,如果您將該應用提交給AppStore,則不能使用該屬性。 – Sirio 2015-04-04 14:38:49

相關問題