2013-03-21 5 views
3

uiview에 탐색 컨트롤이 없다는 것을 알고 있습니다. 따라서, 나는 uiview에서 다음 uiviewcontroller로 나아갈 수 없다.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; 
} 

답변

0

당신은 그래서 먼저 gestureRecognizer에서보기 얻을 nextResponder 방법

을 사용할 수있는 것보다보기를 가진의 ViewController 얻고 싶다면 :

UIView *view = [gestureRecognizer view]; 

과를 포함하는의 ViewController에 대한 검색보다는를 보기

Look here

편집 : 귀하의 경우에의 ViewController를 얻을 방법을 다시 썼다

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

... . 일부보기에서 그것을 얻으려면 :

-(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; 파일을하는 .m하는 @synthesize viewController = _viewController;을 ADD 있습니다. 당신이 제안 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; 
+0

조지 안녕하세요, 저는 코드를 편집하지만 난에있는 UIView를 연결하는 방법을 잘 모르겠어요 응답자. 위의 코드를 편집했습니다. 이것을 봐주세요. 감사! – benedict

+0

나는 당신이하는 일을 전혀 이해하지 못한다는 것을 알고 있습니다. 잠깐만, 나는 대답을 편집 할 것이다 –

+0

안녕 조지. 내 프로젝트에 코드를 추가하고 //이 두 줄의 코드를 // 영역에 추가합니다. TestViewViewController * newViewController = [[TestViewViewController alloc] initWithNibName : nil bundle : nil]; [viewController.navigationController pushViewController : newViewController animated : YES]; } 하지만 난 어떤 오류로 실행 : 'NSInvalidArgumentException', 이유 : '+ [UIGestureRecognizer보기] : 인식 할 수없는 선택기 클래스 0x3f342908로 전송' 이 도움을 주시기 바랍니다. 조지 고마워! – benedict

관련 문제