XCode: вызов действия в главном виде из модального вида - PullRequest
0 голосов
/ 05 марта 2012

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

#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, и я не могу понять, что не так. Мы ценим любую помощь, которую вы можете оказать!

1 Ответ

1 голос
/ 05 марта 2012

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

Таким образом, в вашем файле ModalViewController.h этот код должен быть над вашей реализацией @.

@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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...