我知道这个问题一直被问到,但它对我来说仍然很模糊,所以我想用我的代码做一个例子可能会更容易。
我知道你可以使用:
说我在第一个视图控制器标题中有这段代码:
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
IBOutlet UITextField *Te;
NSInteger evTe;
}
@property (nonatomic, retain) UITextField *Te;
@property (nonatomic) NSInteger evTe;
- (IBAction) makeKeyboardGoAway;
@end
然后在我的实现文件中
#import "FirstViewController.h"
@implementation FirstViewController
@synthesize Te;
- (IBAction) makeKeyboardGoAway;
{
[Te resignFirstResponder];
evTe = [Te.text intValue];
}
如何在SecondViewController中调用 evTe ? (也许使用代表?)。
这是我在第二个视图Controller中得到的,标题:
@interface SecondViewController : UIViewController {
NSInteger evTe;
}
@property (nonatomic) NSInteger evTe;
和实施:
- (IBAction) makeKeyboardGoAway;
{
FirstViewController *first = [[FirstViewController alloc] init];
first.evTe = self.evTe;
NSLog(@"second value is %i",evTe);
}
非常感谢!
编辑Tob
FirstViewController.m
- (IBAction) makeKeyboardGoAway;
{
evTe = [Te.text intValue];
NSLog(@"The value of integer num is %i", evTe);
NSDictionary *changedValues = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:evTe] forKey:@"evTe"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"evTeChanged" object:self userInfo:changedValues];
}
SecondViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToCall:) name:@"evTeChanged" object:nil];
}
- (void)methodToCall:(NSNotification *)aNotification{
NSDictionary *changedValues = [[aNotification userInfo] objectForKey:@"evTe"];
NSString *dictionaryString = [changedValues description];
NSLog(@"Notification returning %d",dictionaryString);
}
不幸的是我没有从SecondView获取任何日志..
答案 0 :(得分:0)
看看NSNotification
。您应该发送特定值已更改的通知,并在第二个视图控制器中注册该通知。
- (IBAction) makeKeyboardGoAway;
{
[Te resignFirstResponder];
evTe = [Te.text intValue];
NSDictionary *changedValues = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:evTe] forKey:@"evTe"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"evTeChanged" object:self userInfo:changedValues];
}
在其他控制器的viewDidLoad
方法中执行:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToCall:) name:@"evTeChanged" object:nil];
现在,每当第一个控制器调用makeKeyboardGoAway
时,方法- (void)methodToCall:(NSNotification *)aNotification
都将被调用。
实施此方法,并在发布通知之前向aNotification
询问其userInfo
,即您在第一个控制器中创建的NSDictionary
。从中获取evTe
值并对该值执行任何操作。
答案 1 :(得分:0)
在两个视图控制器中创建一个名为evTe的@property。
如果FirstViewController负责创建SecondViewController,您可以将evTe的值存储在FirstViewController的属性中,然后在创建SecondViewController之后,也可以在那里设置evTe属性。
- (IBAction) makeKeyboardGoAway;
{
[Te resignFirstResponder];
self.evTe = [Te.text integerValue];
}
//创建SecondViewController的其他方法
SecondViewController* second = [[SecondViewController alloc] init];
second.evTe = self.evTe;
// do what ever
- 编辑 -
@interface FirstViewController : UIViewController {
IBOutlet UITextField *Te;
NSInteger evTe;
}
@property (nonatomic, retain) UITextField *Te;
@property (nonatomic) NSInteger evTe;