XCode:从模态视图调用主视图中的操作

时间:2012-03-05 00:27:07

标签: iphone xcode cocoa-touch ios4

我试图从模态视图控制器调用主视图控制器中的动作(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时,应用程序会一直崩溃,我无法弄清楚出了什么问题。您可以提供的任何帮助表示赞赏!

1 个答案:

答案 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";
}