2012-10-19 4 views
7

"LoginView"를 호출하는 UIViewController으로 현재보기가 있지만 나는 들어 있지 않습니다. NSObject 클래스에 있는데 나는 "MapView"라고하는 다른 UIViewController을 표시하고 싶습니다. 어떻게해야합니까? enter image description hereNSObject 클래스에서 UIViewController를 표시하는 방법은 무엇입니까?

문제는 위의 스크린 샷과 같습니다.

+1

두 가지 : 왜 모델에서 뷰 컨트롤러를 인스턴스화하고 표시하려고합니까? [무엇을 시도 했습니까?] (http://www.whathaveyoutried.com) –

+0

'AppDelegate * appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; [[appDelegate loginViewController] presentViewController : mapViewController animated : 예 완료 : 없음]; ' 그 코드를 시도했지만 작동하지 않았습니다. – Hayzum

+0

AppDelegate 클래스의 이름이 실제로 "AppDelegate"입니까? 또한 NSObject에서 viewController를 제공 할 필요가 없습니다. –

답변

2

모델 내에서 뷰 컨트롤러를 인스턴스화하고 표시하면 안됩니다. 모델별로 ()이 표시되어야합니다.

이 경우 LoginView을 출발점으로 언급했습니다. 어떤 조건이 만족되면 (아마도 성공적으로 로그인 했습니까?) 그에 따라 기본 모델을 업데이트 한 다음 MapView을 표시해야합니다. LoginView 내에서

: 당신이 당신의 UIViewController에 액세스하려는 내가 가정입니다

[self presentViewController:mapView animated:YES completion:<nil or block>]; 
5

: 그렇지 않으면

[self.navigationController pushViewController:mapView animated:YES]; 

: 앱이 탐색 컨트롤러를 사용하는 경우

MapView *mapView = [[MapView alloc] init]; 

NSObject 클래스의 UIViewController 클래스의 멤버. UIViewController 멤버를 NSObject 클래스에 전달하기 만하면됩니다. 이 경우 자기. 그렇게하면 UIView에서 다른 클래스에서 수행하려는 작업을 변경, 편집, 제거 할 수 있습니다. 다음은 그 예입니다. 당신의 UIViewController 클래스

@implementation myViewControllerClass 

- (void) viewDidLoad { 
    //Pass in the UIViewController object, in this case itself. 
    [[myNSOBjectClass alloc] startViewController:self]; 
    .... 
} 
당신의 NSObject의

에서 다음

@interface myNSOBjectClass{ 
    //Global access to the view controller. 
    UIViewController *viewController; 
} 
... 

@implementation myNSOBjectClass 
... 

//function that the caller calls to pass their UIViewController object 
- (void)startViewController:(UIViewController *)callerViewController{ 
    viewController = [[UIViewController alloc]init]; 
    //puts the caller's view controller to the global member. 
    viewController = callerViewController; 
    ... 
} 

지금 당신은 당신의 손끝에서 뷰 컨트롤러가에서 NSObject의 클래스를 호출

!

건배 :)!

+0

감사합니다 :) 그러나이 문제를 여러 달 전에 해결했습니다 : D – Hayzum

+0

@Lifematch 같은 문제가있어서이 답변이 정말 유용하다는 것을 알았습니다. – Alessandro

2

이 코드를 사용해보십시오. 그것은 당신에게 도움이 될 것입니다 ......

귀하의 버튼 클릭 동작에서 귀하의 UINavigationController & 현재 ViewController를 보내야합니다. NSObject 클래스가 해당 컨트롤러를 찾지 못했기 때문입니다.

#import "Method_Action_class.h" 

@implementation Method_Action_class 

-(void)login_method_called:(UINavigationController*)navigation withCurrentViewController:(UIViewController*) controller 
{ 
    Home_ViewController *home = [[Home_ViewController alloc] initWithNibName:@"Home_ViewController" bundle:nil]; 
    [navigation pushViewController:home animated:YES]; 
} 
@end 
:이 코드를 삽입하여 NSObject의를하는 .m 클래스에서

#import <Foundation/Foundation.h> 
#import "Home_ViewController.h" 

@interface Method_Action_class : NSObject 

- (void)login_method_called:(UINavigationController*)navigation withCurrentViewController:(UIViewController*) controller; 
@end 

:이 코드를 삽입하여 NSObject의 .H 클래스에서

[demo login_method_called:self.navigationController withCurrentViewController:self]; 

: 당신의 버튼 동작에서

이 코드를 넣어

그리고 코드를 작성하십시오.당신의 IBAction 또는 특정 방법을 쓰기에서

9

이 : 내가보기 컨트롤러 클래스의 obersver을 작성 NSObject의 서브 클래스에서 NSNotification 센터를 사용하여 푸시 뷰 컨트롤러 및 사후 통지하는 방법을 선언하고 노력하고있다

UIWindow *window=[UIApplication sharedApplication].keyWindow; 
UIViewController *root = [window rootViewController]; 

UIStoryboard *storyboard = root.storyboard; 
CustomViewController *vcc =(CustomViewController *) [storyboard instantiateViewControllerWithIdentifier:@"storyBoardID"]; 

[root presentModalViewController:vcc animated:YES]; 
0

잘.

보기 컨트롤러에서 [[NSNotificationCenter defaultCenter] addObserver : 셀렉터 : @ 선택기 (dismissPickerView) 이름 : kNotificationDismissPicker 개체 : nil];

;

NSOject 하위 클래스 : [[NSNotificationCenter defaultCenter] postNotificationName : kMoveToAchievementView 개체 : 없음];

0

내 NSObject의 클래스에서 다음과 같이 사용 :

[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:yourMapViewContorller animated:YES completion:nil]; 

나는 그것이 유용 바랍니다.

관련 문제