2012-03-05 3 views
0

모달 뷰 컨트롤러에서 주 뷰 컨트롤러의 동작 (changeMainNumber)을 호출하려고합니다. 액션은 ViewController.h에서 2로 UILabel의 mainNumber을 변경해야합니다, 내가 가진 :XCode : 모달보기에서 주보기로 동작 호출

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

IBOutlet UILabel *mainNumber; 

} 
@property (nonatomic, retain) UILabel *mainNumber; 

-(IBAction)changeMainNumber; 

ViewController.m :

#import "ViewController.h" 

@implementation ViewController 
@synthesize mainNumber; 

- (IBAction)changeMainNumber:(id)sender { 
mainNumber.text = @"2"; 
} 

다음 뷰 컨트롤러는 모달 뷰 컨트롤러입니다. ModalViewController.h :

#import <UIKit/UIKit.h> 

@class ViewController; 

@interface ModalViewController : UIViewController { 

} 

-(IBAction)callChangeMainNumber:(id)sender; 

및 ModalViewController.m : 응용 프로그램이 callChangeMainNumber가 호출되고 내가 잘못이 무엇인지 알아낼 수 없을 때 충돌 계속이 설정으로

#import "ModalViewController.h" 

@implementation ModalViewController 

- (IBAction)callChangeMainNumber { 
ViewController *viewController = [[ViewController alloc] init]; 
[viewController changeMainNumber]; 
} 

. 당신이 제공 할 수있는 도움을 주시면 감사하겠습니다!

+0

충돌의 대리자 메서드를 구현해야? 메시지가 뭐니? 어디에서 추락합니까? callChangeMainNumber 안에 새로운 ViewController를 만들고 변경하고 있다는 것을 알고 있습니까? – fbernardo

+0

답해 주셔서 감사합니다. callChangeMainNumber 액션 (둥근 사각형 버튼)이 실행되면 앱이 충돌합니다. 정확히 무엇을해야할지 모르겠다. 그렇다면 callChangeMainNumber로 changeMainNumber를 호출하는 올바른 방법은 무엇일까? – potato

+0

callChangeMainNumber가 실행될 때의 의미는 무엇입니까? 어느 선 이요? 올바른 방법은 ViewController 개체를 ModalViewController 개체에 전달하여 마지막 개체가 changeMainNumber 메시지를 첫 번째 개체로 보낼 수 있도록하는 것입니다. 알았다? – fbernardo

답변

1

ModalViewController에서 게시 한 코드가 ViewController를 참조하지 않습니다. 코드에서 새 코드를 만듭니다. 문제를 해결하는 가장 좋은 방법은 ViewController를 ModalViewController의 대리자로 만드는 것입니다.

그래서 ModalViewController.h 파일에서 @implementation 위의 코드를 가져야합니다. 헤더의 당신의 @implementation에서 다음

@protocol ModalViewControllerDelegate 
    - (void)shouldChangeMainNumber; 
@end 

가 있습니다
@property (nonatomic,assign)IBOutlet id <ModalViewControllerDelegate> delegate; 

지금 당신은 당신의 IBAction를 방법을 가지고하는 .m 파일에서 당신이 주요 번호를 변경하고자하는 대리자를 말한다.
- (IBAction)callChangeMainNumber { 
    [self.delegate shouldChangeMainNumber]; 
} 

는 그런 다음 ViewController.m 파일에 당신의 viewDidLoad가 넣어 좋은 장소는 보통에서 ModalViewController의 대리인으로 자신을 설정해야합니다. 그래서 먼저 ModalViewController의 헤더에 속성을 만들고 합성 한 다음 viewDidLoad에 추가하십시오.

self.modalViewController.delegate = self; 

그리고 마지막으로 당신은 당신의하는 .m 파일 어딘가에

- (void)shouldChangeMainNumber { 
    mainNumber.text = @"2"; 
} 
관련 문제