在我們平常的開發(fā)過程中唐全、在自定義View里面觸發(fā)點擊方法嵌器,實現(xiàn)Push到另一個ViewController里面一般通過代理胁住、block、通知等方法
這里介紹一種直接在View里面實現(xiàn)跳轉比較方便的一種方法:
#import <UIKit/UIKit.h>
@interface CustomView : UIView
@end
#import "CustomView.h"
#import "ViewPushViewController.h"
@implementation CustomView
//初始化
- (instancetype)init{
if (self = [super init]) {
[self createUI];
}
return self;
}
//懶加載
- (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;
}
//創(chuàng)建UI
- (void)createUI{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[self addSubview:btn];
btn.frame = CGRectMake(100, 100, 100, 50);
btn.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2);
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn setTitle:@"點擊跳轉" forState:UIControlStateNormal];
btn.backgroundColor = [UIColor yellowColor];
[btn addTarget:self action:@selector(pushToNextController) forControlEvents:UIControlEventTouchUpInside];
}
- (void)pushToNextController{
//需要跳轉的ViewController
ViewPushViewController *vc = [[ViewPushViewController alloc]init] ;
vc.hidesBottomBarWhenPushed = YES ;
//通過找到的控制器進行跳轉
[[self viewController].navigationController pushViewController:vc animated:YES] ;
}
@end
思路:
觸發(fā)點擊事件的控件都是需要加載到控制器所在的view上的糖耸,找到控件的事件的響應者鏈就可以找到視圖所加載在的Controller,通過這個controller找到navigationController進行跳轉丘薛。
主要方法:
OC
- (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;
}
Swift
public func viewController()->UIViewController? {
var nextResponder: UIResponder? = self
repeat {
nextResponder = nextResponder?.next
if let viewController = nextResponder as? UIViewController {
return viewController
}
} while nextResponder != nil
return nil
}
以上方法最好寫在分類里面嘉竟、方便調用
源碼下載