视图如何调用本视图的控制器

视图如何调用本视图的控制器

有以下几种方法

  • 第一种方法在这个自定义的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                                      
 @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];

你可能感兴趣的:(视图如何调用本视图的控制器)