2

在一个视图中,我们称它为 firstView 我创建了一个 secondView,如下所示,如果在 firstView 中发生某些事情,则将其推送:

SecondViewController *secondVC = [[secondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];


    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];

现在,当我在 secondView 中时,如果假设按下按钮,我想返回到 firstView 并将一个值从 secondView 传递回 firstView(假设从 secondView 到 firstView 的文本字段的整数值)。

这是我尝试过的:

@protocol SecondViewControllerDelegate;

#import <UIKit/UIKit.h>
#import "firstViewController.h"

@interface SecondViewController : UIViewController <UITextFieldDelegate>
{
    UITextField *xInput;
    id <SecondViewControllerDelegate> delegate;
}

- (IBAction)useXPressed:(UIButton *)sender;

@property (assign) id <SecondViewControllerDelegate> delegate;

@property (retain) IBOutlet UITextField *xInput;

@end

@protocol SecondViewControllerDelegate
- (void)secondViewController:(SecondViewController *)sender xValue:(int)value;

@end

并且在 m 文件中

- (IBAction)useXPressed:(UIButton *)sender
{
    [self.delegate secondViewController:self xValue:1234]; // 1234 is just for test
}

然后在 firstView 我做了:

#import "SecondViewController.h"

@interface FirstViewController : UITableViewController <SecondViewControllerDelegate> {

}

@end

并实施:

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [self.navigationController popViewControllerAnimated:YES];
}

现在,问题在于 FirstViewController 中的一个我收到警告“没有找到协议“SecondViewControllerDelegate”的定义,并且对于两个委托方法(上面的最后一段代码)根本没有被调用。有人可以告诉我怎么了?

4

3 回答 3

1

在这条线之后

SecondViewController *secondVC = [[secondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

添加

secondVC.delegate = self;

也代替

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [self.navigationController popViewControllerAnimated:YES];
}

你应该使用

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [sender popViewControllerAnimated:YES];
}
于 2012-07-01T19:08:13.043 回答
1

FirstViewController.h 文件中:

#import "SecondViewController.h"

@interface FirstViewController : UITableViewController <SecondViewControllerDelegate> {

SecondViewController *secondViewController;

}

@end

在实现文件中,您在其中初始化 SecondViewController 实例的下一行将 self 分配给委托属性:

secondViewController.delegate = self;

接下来定义委托方法:

- (void)secondViewController:(SecondViewController *)sender xValue:(int)value
{
NSLog ("This is a Second View Controller with value %i",value)
}
于 2012-07-01T19:11:31.377 回答
0

对于问题 1: 的@protocol定义SecondViewControllerDelegate看起来像在secondViewController.h; 你确定这个文件是导入的firstViewController.h吗?否则它不会知道协议。

问题2:它可能与问题1完全无关。你确定动作连接正确吗?您可以NSLog()在您的电话中调用useXPressed:以确保该方法实际上在您期望的时候被调用吗?

于 2012-07-01T19:07:51.430 回答