我试图从模态视图控制器调用主视图控制器中的动作(changeMainNumber)。该操作应该将UILabel mainNumber更改为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时,应用程序会一直崩溃,我无法弄清楚出了什么问题。您可以提供的任何帮助表示赞赏!
答案 0 :(得分:1)
您从ModalViewController发布的代码未引用您的ViewController。您正在代码中创建一个新的。解决问题的最佳方法是使ViewController成为ModalViewController的委托。
因此,在您的ModalViewController.h文件中,您应该将此代码放在@implementation上面。
@protocol ModalViewControllerDelegate
- (void)shouldChangeMainNumber;
@end
然后在标题的@implementation中有:
@property (nonatomic,assign)IBOutlet id <ModalViewControllerDelegate> delegate;
现在在您拥有IBAction方法的.m文件中,告诉代理您希望它更改主号码。
- (IBAction)callChangeMainNumber {
[self.delegate shouldChangeMainNumber];
}
然后在你的ViewController.m文件中你需要将自己设置为ModalViewController的委托,通常在viewDidLoad中放置它是个好地方。因此,首先在ModalViewController的标题中创建一个属性并合成它,然后将其添加到viewDidLoad。
self.modalViewController.delegate = self;
最后你需要在你的.m文件中实现委托方法
- (void)shouldChangeMainNumber {
mainNumber.text = @"2";
}