在view中实现UIViewController的跳转

view中是不能进行UIViewController的push,pop等操作的,若进行跳转操作,一般是用代理,block,通知等实现,那如何实现在ViewController的subView中实现跳转操作呢,其实只要获取该view所在的ViewController即可。

获取view所在UIViewController

UIView+UIViewController.h

#import <UIKit/UIKit.h>

@interface UIView (UIViewController)

- (UIViewController *)viewController;

@end

UIView+UIViewController.m

#import "UIView+UIViewController.h"

@implementation UIView (UIViewController)

- (UIViewController *)viewController {

    //通过响应者链,获得view所在的视图控制器
    UIResponder *next = self.nextResponder;
    do {
        //判断响应者对象是否是视图控制器类型
        if ([next isKindOfClass:[UIViewController class]]) {
            return (UIViewController *)next;
        }
        next = next.nextResponder;
    }while(next != nil);

    return nil;
}

@end

or

- (UIViewController *)viewController {
    // Traverse responder chain. Return first found view controller, which will be the view‘s view controller.
    UIResponder *responder = self;
    while ((responder = [responder nextResponder]))
        if ([responder isKindOfClass: [UIViewController class]])
            return (UIViewController *)responder;

    return nil;
}

  

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

  

  

使用:

在subview中导入  #import "UIView+UIViewController.h"

-(void)viewDidSelect
{
    WebViewController *vc = [[WebViewController alloc] init];
    vc.webUrl [email protected]"http://www.baidu.com";
    [self.viewController.navigationController pushViewController:vc animated:YES];
}  
时间: 2024-12-06 13:31:53

在view中实现UIViewController的跳转的相关文章

iOS --- 在NSObject子类的执行代码中实现UIViewController的跳转

在iOS开发中, 要实现UIViewController之间的跳转,通过navigationController的pushViewController或者UIViewController自身的presentViewController的方式即可.但要求是从一个UIViewController跳到另外一个UIViewController中.如果要从NSObject子类的执行代码中做跳转至UIViewController的操作, 要如何实现呢? 首先, 说明下为何会有这样的需求, 即: UIColl

Android之在View中执行Activity的跳转

我们经常会在Activity中用到继承LinearLayout或者其他布局的View,但是又想在View的代码里面去执行 Activity的跳转,直接使用startActivity会报错,那么就要用到getContext()来“Returns the context the view is running in, through which it can access the current theme, resources, etc.” 示例代码如下: // 跳转到相应的Activity In

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

MVC中的传参并在View中获取

首先action跳转的模式有如下: redirecttoaction("index");//一个参数时在本controller下,不传入参数. redirecttoaction(actionname,controllername) //可以直接跳到别的controller. redirecttoroute(new {controller="home",action="index"});//可跳到其他controller redirecttorou

Java中轻松实现界面跳转

作者:兄弟连Java中轻松实现界面跳转,Java中轻松实现界面跳转 假设这样一种情况,我们的系统的界面使用javax.swing包构建,界面的基础是BaseView,他是一个容器,当然他应当提供获取控件元素的功能,比如得到按钮,下拉框,表格等,当然仅仅是一个容器而已,而我们的界面的元素全部部署在JPanel上. 描述为: 一个界面就是一个BaseView,他只包含一个JPanel,这个包含JPanel包含所有我们的Swing控件,例如JButton,JLable等等. 问题出现了:我们通常因为业

onInterceptTouchEvent 与 onTouchEvent 分析与MotionEvent在ViewGroup与View中的分发

onInterceptTouchEvent 与 onTouchEvent 分析与MotionEvent在ViewGroup与View中的分发 Notice:本文将紧接着 Android 触屏事件 OnTouch onClick onTouchEvent对于触屏事件的处理和分发 这一片博文来分析,假设您还没有读过这一片博文,强烈建议你先读一次上述博文 OK,言归正传,我们開始吧 近期,一直听到有人在争论关于dispatchTouchEvent这个函数 和 onInterceptTouchEvent

android自定义控件(四) View中的方法

onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int, int) 当view的大小发生变化时触发 onDraw(Canvas) view渲染内容的细节 onKeyDown(int, KeyEvent) 有按键按下后触发 onKe

控制WinForm中Tab键的跳转

一,需求 在Winform中,默认情况下,按下Tab键,光标会按照我们设定的TabIndex值从小到大进行跳转. 但如果用户要求按下Tab键跳转到特定的控件,这种要求还是很合理的,比如用户只想输入几个必须填的项目. 我们可以在配置文件中配置这些必须填写的项目,并设定他们的跳转顺序.这样程序也更加灵活,利于扩展. 二,探索实现方法 1,在每个输入控件的keyDown事件里判断是Tab键,做相应的跳转处理. 最后调查发现按下Tab键,并不会触发控件keyDown事件,Tab键默认被系统处理了,悲剧了

Android中实现Bitmap在自定义View中的放大与拖动

一:基本实现思路 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对自定义View的触摸事件监听 放大与拖动 基于单点触控实现Bitmap对象在View上的拖动.并且检测View的边缘,防止拖动过界.基于两个点触控实现Bitmap对象在View上的放大.并且检测放大倍数.基于Matrix对象实现对Bitmap在View上放大与平移变换 Bitmap对象在View中的更新与显示 通过重载onDraw方法,