视图如何调用本视图的控制器
有以下几种方法
- 第一种方法在这个自定义的UIVIew设置一个delegate,指向 A,然后在按钮事件使用delegate让A执行方法跳转B
在这个自定义的UIVIew—>B
B所载的界面—>A
在A里面定义一个算法如下:
-(void)changeInterface:(NSString *)interfacename{
Class class = NSClassFromString(interfacename);
UIViewController *con =[[class alloc] init];
if (con == self) {
return ;
}
[self.navigationController pushViewController:con animated:YES];
}
在点击事件发生的同时传递一个指针过去,例如:
pop.delegate = self;
在B视图中实现跳转
[_delegate changeInterface:@"ClassifyViewController"];
第二种方法
也可以发通知给UIViewController A去跳转到B第三种方法
建立一个UIView的扩展
UIView+Extent.h文件
#import <UIKit/UIKit.h>
@interface UIView (Extent)
-(UIViewController *)viewController;
@end
UIView+Extent.h文件
#import "UIView+Extent.h"
@implementation UIView (Extent)
-(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;
}
@end
- 第四种方法
//取出根视图控制器
UITabBarController *tabBarVc = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
//取出当前选中的导航控制器
UINavigationController *Nav = [tabBarVc selectedViewController];
[Nav pushViewController:topDetailView animated:YES];