2010-02-22 10 views
24

मेरे पास एक UIViewController है जिसमें मेरे पास इंटरफ़ेस बिल्डर से जोड़ा गया UITextView है.अब मैं हाइपरलिंक या फोन नंबर पर क्लिक करते समय एक दृश्य को धक्का देना चाहता हूं। मैं यह पता लगाने में सक्षम हूं कि स्टैक ओवरफ्लो में मिली विधि का उपयोग करके कौन सा यूआरएल क्लिक किया गया है। यहाँ विधिआईफोन एसडीके में UIView के सुपर व्यू के 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 के superview की ViewController पाने के लिए इतना है कि मैं एक और ViewController धक्का कर सकते हैं जब मैं यूआरएल/फ़ोन नंबर पर क्लिक करें है।

उत्तर

73

उपयोग कर सकते हैं आप इसे सीधे उपयोग नहीं कर सकते, लेकिन आप अगले दृश्य नियंत्रक (यदि हो तो) प्रत्युत्तर श्रृंखला traversing द्वारा पा सकते हैं।

यह कैसे 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 मिल सकती है। तीन20 का उपयोग करके और उसे नहीं पता था। मैंने हमेशा एक प्रतिनिधि बनाया। किसी भी व्यक्ति के लिए जो इसे तीन20 में उपयोग करने में रूचि रखता है। बस '#import" आयात करें Tri20UICommon/UIView + TTUICommon.h "' – choise

+0

धन्यवाद! यह सही काम करता है! –

+0

आप मेरा दिन बचाओ। यह एक आकर्षण की तरह काम करता है –

1

कृपया ध्यान दें कि -webView:decidePolicyForNavigationAction:... एक अनियंत्रित विधि है (आईफोनओएस के लिए वैसे भी। यह मैक ओएस एक्स के लिए प्रलेखित है) और यदि ऐपस्टोर के लिए ऐप खारिज कर दिया जाएगा तो ऐप को खारिज कर दिया जाएगा।


एक व्यू कंट्रोलर दृश्य के साथ संबद्ध नहीं है। केवल विपरीत लागू होता है। व्यू कंट्रोलर तक पहुंचने के लिए, इसे एक वैश्विक रूप से सुलभ चर या संपत्ति बनाएं।

यदि इंटरफ़ेस निर्माता का उपयोग किया जाता है तो आम तौर पर कोई व्यक्ति उस प्रतिनिधि प्रतिनिधि को आउटलेट परिभाषित कर सकता है जो नेविगेशन व्यू कंट्रोलर से जुड़ता है। तो फिर तुम

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

आप UIView

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

_viewDelegate एक निजी संपत्ति है, यदि आप ऐपस्टोर में ऐप सबमिट करते हैं तो इसका उपयोग नहीं किया जा सकता है। – Sirio

संबंधित मुद्दे