objective-c - 如何从 UIView 导航到 UIViewController

标签 objective-c

我知道 uiview 没有导航控制。因此,我无法从 uiview 推送到下一个 uiviewcontroller。

这是我的方法的代码。请帮忙。谢谢!

 - (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {
    CGPoint pointInView = [recognizer locationInView:self];
    NSLog(@"%f , %f",pointInView.x,pointInView.y);

    if ((pointInView.x >= (231.0) && pointInView.x <=(293) && pointInView.y >= (193)  && pointInView.y <=(218)) )
    {

        // how to push to next viewcontroller here?

        UIView *view = [UIGestureRecognizer view]; //what should i do for this code?


        [self viewController];
    }
}

-(TestViewViewController*)viewController
{
    for (UIView *next = [self superview]; next; next = next.superview)
    {
        UIResponder *nextResponder = [next nextResponder];

        if([nextResponder isKindOfClass:[TestViewViewController class]])
        {

            return (TestViewViewController*)nextResponder;
        }
    }

    return nil;
}

最佳答案

如果你想让 viewcontroller 有一个 View ,你可以使用 nextResponder 方法

所以首先你从 gestureRecognizer 获得 View :

UIView *view = [gestureRecognizer view];

然后搜索包含 View 的 View Controller

Look here

编辑:

 if ((pointInView.x >= (231.0) && pointInView.x <=(293) && pointInView.y >= (193)  && pointInView.y <=(218)) )
    {

        // how to push to next viewcontroller here?

        UIView *view = [recognizer view]; //what should i do for this code?

       UIViewController *viewController = [self getViewControllerFromView:view];

       if(viewController) {
          // do whatever you want...
         UIViewController *newViewController = ...
         [viewController.navigationController pushViewController:newViewController animated:YES];
       }

    }

... 我为您的案例重写了方法 get ViewController 。从某个角度获取它:

-(UIViewController*)getViewControllerFromView:(UIView*) view
{
    if([[view nextResponder] isKindOfClass:[UIViewController class]])
    {
        return (UIViewController*)[view nextResponder];
    }
    else {

        for (UIView *next = [view superview]; next; next = next.superview)
        {
            UIResponder *nextResponder = [next nextResponder];

            if([nextResponder isKindOfClass:[UIViewController class]])
            {
                return (UIViewController*)nextResponder;
            }
        }
    }

    return nil;
}

新编辑::

你的 EAGLView@property (nonatomic, retain) UIViewController *viewController; 添加 @synthesize viewController = _viewController; 到 .m 文件。

CoreMotionAppDelegate::

MainViewController * itemsViewController = [[MainViewController alloc]init];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:itemsViewController];
    glView.viewController = itemsViewController;  


    [glView startAnimation];
    [[self window]setRootViewController:navController];

而且在你的 scrollViewDoubleTapped 方法中只是

EAGLView *v = (EAGLView*)[recognizer view];  
UIViewController *viewController =  v.viewController;

关于objective-c - 如何从 UIView 导航到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541851/

相关文章:

c++ - 如何生成格式为 HxHHHHHHHH 的 NSString,表示 Objective C、C++ 或 C 中的浮点值?

objective-c - 如何使用 Cocoa Bindings 将复选框单元添加到 NSTableView?

ios - 按位右移 >> 在 Objective-C 中

ios - 检测点击 UITableView 的空白区域

ios - 屏幕锁定时 HealthStore enableBackgroundDelivery

objective-c - 如何让 OS X 设置 NSWindow 的初始位置

iphone - 按 Objective C 中的子数组值对数组排序

objective-c - 如何在旋转的 UIView 中使用 CGRectContainsPoint()

objective-c - 什么时候重写并重用 MTLBuffer 或其他 Metal 顶点缓冲区是安全的?

objective-c - 如何在swift中使用其他类的指针