2012-03-05 3 views
0

Я пытаюсь вызвать действие (changeMainNumber) в главном контроллере представления из модального контроллера. Действие должно изменить UILabel mainNumber до 2. В ViewController.h, у меня есть: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:

#import "ModalViewController.h" 

@implementation ModalViewController 

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

С помощью этой установки приложение сохраняет сбой, когда callChangeMainNumber называется, и я не могу понять, что это неправильно. Любая помощь, которую вы можете предоставить, оценена!

+0

разбивающихся? Что такое сообщение? Где он падает? Вы знаете, что вы создаете новый ViewController внутри callChangeMainNumber и меняете его? – fbernardo

+0

Спасибо за ответ. Приложение сбой, когда выполняется действие callChangeMainNumber (кнопка round rect). Я точно не знаю, что делать, так что будет правильным способом вызвать changeMainNumber с callChangeMainNumber? – potato

+0

Что вы имеете в виду при запуске callChangeMainNumber? Какая линия? Правильный способ - передать объект ViewController объекту ModalViewController, чтобы последний мог отправить сообщение changeMainNumber первому объекту. Понял? – fbernardo

ответ

1

Код, который вы отправили на ваш ModalViewController, не ссылается на ваш ViewController. Вы создаете новый код. Лучшим решением вашей проблемы было бы сделать ваш ViewController делегатом в ModalViewController.

Итак, в вашем файле ModalViewController.h у вас должен быть этот код над вашим @implementation.

@protocol ModalViewControllerDelegate 
    - (void)shouldChangeMainNumber; 
@end 

Затем в @implementation заголовка есть:

@property (nonatomic,assign)IBOutlet id <ModalViewControllerDelegate> delegate; 

Теперь в файле .m, где у вас есть свой метод IBAction, скажите делегат, который вы хотите, чтобы изменить основной номер.

- (IBAction)callChangeMainNumber { 
    [self.delegate shouldChangeMainNumber]; 
} 

Затем в файле ViewController.m вам необходимо установить себя в качестве делегата от ModalViewController, как правило, в viewDidLoad это хорошее место, чтобы поместить его. Поэтому сначала создайте свойство в своем заголовке для модуля ModalViewController и синтезируйте его, а затем добавьте его в viewDidLoad.

self.modalViewController.delegate = self; 

и, наконец, вы должны реализовать метод делегата в вашем .m файл где-то

- (void)shouldChangeMainNumber { 
    mainNumber.text = @"2"; 
} 
Смежные вопросы