在视图中,我们先调用它,然后按如下方式创建第二个视图,如果在第一个视图中发生了某些事情,则将其推送:
SecondViewController *secondVC = [[secondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
现在,当我在第二个视图中,如果按下按钮,我想回到firstView,并将值从secondView传回第一个视图(假设从第二个视图到第一个视图的文本字段的整数值) )。
以下是我的尝试:
@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
}
然后在第一个视图中我做了:
#import "SecondViewController.h"
@interface FirstViewController : UITableViewController <SecondViewControllerDelegate> {
}
@end
并实施:
- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
[self.navigationController popViewControllerAnimated:YES];
}
现在,问题出现在FirstViewController中,我得到的警告是“找不到协议的定义”SecondViewControllerDelegate“,而且两个委托方法(上面的最后一段代码)根本没有被调用。有人可以请告诉我出了什么问题?
答案 0 :(得分: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];
}
答案 1 :(得分: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)
}
答案 2 :(得分:0)
对于问题1:@protocol
的{{1}}定义看起来像SecondViewControllerDelegate
;你确定这个文件是在secondViewController.h
中导入的吗?否则它不会知道协议。
问题2:它可能与问题1完全无关。您确定该动作是否正确连接?您可以在firstViewController.h
中进行NSLog()
调用,以确保该方法实际上是在您预期的时候调用的吗?