【问题标题】:XCode: Call action in main view from modal viewXCode:从模态视图的主视图中调用操作
【发布时间】:2012-03-22 13:06:51
【问题描述】:

我正在尝试从模态视图控制器调用主视图控制器中的操作 (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";
}

下一个视图控制器是模态视图控制器。 模态视图控制器.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 时,应用程序会不断崩溃,我不知道出了什么问题。感谢您提供的任何帮助!

【问题讨论】:

  • 崩溃?消息是什么?它在哪里崩溃?你知道你在 callChangeMainNumber 里面创建了一个新的 ViewController 并改变它吗?
  • 感谢您的回答。运行 callChangeMainNumber 操作(圆形矩形按钮)时,应用程序崩溃。我不知道该怎么做,那么用 callChangeMainNumber 调用 changeMainNumber 的正确方法是什么?
  • 运行 callChangeMainNumber 是什么意思?哪条线?正确的方法是将 ViewController 对象传递给 ModalViewController 对象,以便最后一个可以将 changeMainNumber 消息发送给第一个对象。明白了吗?
  • 好的,我想我明白了。我对此有点陌生,那么我将如何将 ViewController 对象传递给 ModalViewController?
  • 视情况而定,您可以在 ModalViewController 上设置一个名为 mainController 的属性并执行 modalViewController.mainController = self;如果您在 ViewController 类上初始化 modalViewController。

标签: iphone xcode cocoa-touch ios4


【解决方案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";
}

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多