2012-01-13 4 views
0

안녕하세요 세 가지보기가 있는데 작동하지 않는 무언가를 얻고 싶습니다. 사용자가 특정 버튼을 누르면 그가 기록되었는지 여부를 확인하는 기본보기가 있습니다. 예를 들자면 그는 처음에 로그인보기로 이동하지 않고 B보기로 직접 전송됩니다. 성공적인 로그인 후 내가 B를보기로 이동이 코드를 가지고 :아이폰의 여러보기 간 이동

incidencias =[[MisIncidencias alloc] 
       initWithNibName:@"MisIncidencias" 
       bundle:nil]; 

[self.view addSubview:incidencias.view]; 

것은 그것이 아래가 보여 플러스 사용자가 다시 클릭 할 경우 로그인으로 돌아 간다 때문에 내가 로그인보기를 제거하고자하지만, 내가 추가하는 경우 :

[self.view removeFromSuperview]; 

전이나 [self.view addSubview:incidencias.view] 후, 난 그냥 기본보기로 리디렉션;

내가 분명히 설명했는지는 잘 모르겠지만 예를 들어 안드로이드에서 마무리를 호출하고 다음 활동을 호출하면 로그인 활동이 사라질 수 있지만 여기서는 아이폰에서 무엇을해야할지 모르겠다.

incidencias=[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil 
        ]; 

    [self.view addSubview:incidencias.view]; 

    login=[[LoginViewController alloc] 
        initWithNibName:@"LoginViewController" 
        bundle:nil]; 
    [self.view addSubview:login.view]; 

가 incidencias 시작하기 때문에 잘 작동하지 않고에 로그인을 기다리지 않습니다 :

나는 다른 솔루션 모두보기 잇달아 추가하는 것입니다하지만 정말 잘 작동하지 않습니다 발견 끝.

감사

편집 : 나는

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex: (NSInteger)buttonIndex{ 

if(self.delegate) 
    [self.delegate loginSucceededFromController:self] 

이 LoginViewController에

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
[viewController.view removeFromSuperview]; 

incidencias =[[MisIncidencias alloc] 
       initWithNibName:@"MisIncidencias" 
       bundle:nil]; 

[self.view addSubview:incidencias.view]; 
} 

: LoginViewControllerDelegate 과의 ViewController 안쪽이 방법 : 나는 프로토콜을 추가 내 코드를 수정 한 BEON 감사는 } 오류가 발생했습니다. 의미 I ssue : 'LoginViewController *'유형의 객체에 'delegate'속성이 없습니다.

로그인이 성공하면 사용자가 경고를보고 ok를 클릭하면 위의 메소드가 호출됩니다.

그밖에 내가 뭘 추가해야합니까? 나는 아이폰으로 시작, 그리고 난 이해가 안 돼요 잘 대리인이 (내가 자바에서 온)

+0

내 대답 fmi에 대한 귀하의 답변에 대한 내 답변보기 ... – beOn

답변

1

아, 그래, 나쁘지 않아. 다음은 마음에 드는 첫 번째 해결책입니다.

단계 1. 로그인보기에 대한 대리인 프로토콜을 만듭니다.

@protocol LoginViewControllerDelegate <NSObject> 
@required 
- (void)loginSucceededFromController:(LoginViewController*)viewController; 
@end 

2 단계 기본 뷰 컨트롤러

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
// TODO: we'll put something here in a second 
} 

3 단계에서 프로토콜을 구현합니다.로그인보기를 해제 4 단계

if (loginSuccess && self.delegate) { 
    [self.delegate loginSucceededFromController:self] 
} 

성공적으로 로그인에 로그인보기에서 대리자 메서드를 호출하고 당신이 이미 가지고있는 코드를 사용하여 기본보기 컨트롤러에서 새로운 전망을 제시 : 희망

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
    [viewController.view removeFromSuperview]; 

    incidencias =[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil]; 

    [self.view addSubview:incidencias.view]; 
} 

을 어떤 것들을 지워줍니다. 문제가 발생한 이유는 뷰에 하위 뷰를 추가 한 다음 뷰를 즉시 제거하거나 뷰를 제거한 다음 하위 뷰를 추가했기 때문입니다. 위의 코드에서 뷰의 컨트롤러 대리자를 호출하면 뷰의 superview를 소유 한 대리자가 먼저 뷰를 제거한 다음 superview에 newView (더 나은 용어가 부족한 경우)를 추가합니다. 수퍼 뷰가 삭제되지 않았으므로 newview를 표시 할 수 있습니다.

+0

감사합니다. anser에게 많은 감사를 표하지만, 제대로 작동하지 않습니다. 나는 프로토콜에 대해 읽었지만, 그 밖의 무엇이 빠져 있는지 찾을 수 없다. 위의 질문을 수정하여 오류가 발생한 부분을 조사했습니다. – vallllll

+0

대리자 속성을 설정하고 사용하는 방법에 대한 지침은이 질문에 대한 내 대답을 참조하십시오. 질문은 다른 것에 관한 것이지만 내가 설명하는 설정은 문제를 해결할 것입니다. http://stackoverflow.com/a/8851420/152236 – beOn

+0

내가 언급하지 않은 한 가지는 위임자 속성을 직접 설정해야한다는 것입니다 . 따라서 메인 뷰 컨트롤러에서 login.delegate = self를 할 수 있습니다. 그런 식으로 로그인 viewController는 델리게이트가 어떤 객체인지 알기 때문에 메시지를 보낼 곳을 알 수 있습니다. LoginViewController.h가 'delegate'라는 속성을 정의하지 않았기 때문에 오류가 발생했습니다. – beOn

0

이제 당신이 로그인하면 하나 extern BOOL login; 같은 글로벌

처럼 응용 프로그램을 통해 액세스 할 수 있습니다 BOOL을 할 것입니다 YES으로 설정하십시오. 지금 확인하십시오

if(login == YES){ 

incidencias=[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil 
        ]; 

    [self.view addSubview:incidencias.view]; 

} 
else{ 
login=[[LoginViewController alloc] 
        initWithNibName:@"LoginViewController" 
        bundle:nil]; 
    [self.view addSubview:login.view]; 
} 
+0

나는 그가 이미이 부분을 할 수 있다고 생각합니다. 그가 가지고있는 문제는 성공적인 로그인 후에 MisIncidencias의 인스턴스를 화면에 표시하는 것입니다. – beOn

0

당신이 뭔가 바로 작업을 원하고, 당신은 단지 self.navigationController.viewcontrollers 배열의 변경 가능한 사본을 얻을 다음 U 가능성이

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

를 사용할 수있다 ... UINavigationController가를 사용하는 경우, 튀어 마지막 요소는 로그인 화면이 될 것이며 새 화면을 밀어 넣어 화면 b ..로 이동하고이 함수에 배열을 전달하면 이제 안전합니다!

+0

여기에 UINavigationController가 사용 된 것처럼 보이지는 않지만, 그렇다면이 방법이 될 것입니다. – beOn