![](/img/trans.png)
[英]Sending value on Button click from UIView to its superview's superview(UIViewController) -iOS
[英]How to get UIViewController of a UIView's superview in iOS?
我有一个UIViewController,我在其中添加了一个从界面构建器添加的UITextView。 现在,当我点击超链接或电话号码时,我想推送视图。 我能够使用stackoverflow中找到的方法检测到哪个url被点击了。 这是方法
@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,这样当我点击URL / Phone Number时我就可以推送另一个viewController。
您无法直接访问它,但您可以通过遍历响应程序链找到下一个视图控制器(如果有)。
这就是Three20框架的作用:
- (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;
}
请注意-webView:decidePolicyForNavigationAction:...
是一个未记录的方法(对于iPhoneOS无论如何。它是针对Mac OS X记录的),如果是AppStore,应用程序可能会被拒绝。
视图控制器未与视图关联。 只有反向适用。 要访问视图控制器,请将其设置为全局可访问的变量或属性。
如果使用接口构建器,通常可以定义连接到导航视图控制器的应用程序委托的出口。 然后你可以使用
MyAppDelegate* del = [UIApplication sharedApplication].delegate;
[del.the_navigation_view_controller pushViewController:...];
您可以从UIView获取UIviewController
UIViewController *viewC = (UIViewController *)view->_viewDelegate;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.