iOS-在自定义View里面实现Push方法

在我们平常的开发过程中、在自定义View里面触发点击方法,实现Push到另一个ViewController里面一般通过代理、block、通知等方法

这里介绍一种直接在View里面实现跳转比较方便的一种方法:

#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;
}

//创建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

思路:

触发点击事件的控件都是需要加载到控制器所在的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
    }

以上方法最好写在分类里面、方便调用
源码下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,151评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,195评论 4 61
  • 前几天,一个朋友问了我一个问题:如果不要面子,咱还能活吗? 我说:能活。 朋友说:那咱还忙乎个毛啊。摆出一副死猪不...
    历史人物传记故事阅读 1,813评论 0 0
  • 你本明知,因何退却。 你固心高,屡归无成。 你亦不屈,志趣仍在。 你曾憧憬,奈何自怯。 他日稚儿,自是忘忧。 他乡...
    归尘于土阅读 1,664评论 0 0
  • 今年,我有两个亲戚小孩高考,而我则理所应当的当起了免费的报志愿指南,顺带的还有三年来积累的上大学攻略。 就在昨天还...
    大佳和小米阅读 4,245评论 0 3