0

我有一个我正在处理的项目,其中涉及 3 个选项卡UITabBarController(全部在情节提要中完成)。

每个选项卡都运行在不同的视图控制器上。

我在选项卡 1 上有一个按钮,它执行计算并在文本框中返回结果。我想要这样当我点击计算时,结果也会在选项卡 2 的文本框中返回。

我不太确定如何在UIViewControllers 之间传递数据,因此不胜感激。

4

3 回答 3

2

根据 vshall 所说,您可以执行以下操作:-

yourAppdelegate.h

@interface yourAppdelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>
{
      NSString *myCalResult;
}
@property (nonatomic,retain) NSString *myCalResult;

yourAppdelegate.m

@implementation yourAppdelegate
@synthesize myCalResult,

yourCalclass.h

#import "yourAppdelegate.h"

@interface yourCalclass : UIViewController
{
yourAppdelegate *objAppdelegate;
}

yourCalclass.m

- (void)viewDidLoad
{
    objAppdelegate = (yourAppdelegate *) [[UIApplication sharedApplication]delegate];
    [super viewDidLoad];
}

-(IBAction)ActionTotal
{
objAppdelegate.myCalResult=result;
}

现在您存储的结果objAppdelegate.myCalResult可以在另一个选项卡中使用此变量来创建您的 Appdelegate 对象。希望它可以帮助你

于 2013-01-19T13:04:13.900 回答
1

您可以在应用程序委托中定义一个变量,并将结果存储在该变量中以用于第一类。一旦你切换了类,你就可以通过创建你的 appDelegate 的实例并将它分配给你的文本字段来在你的类 2 中获取该值。

正如 Sanjit 所建议的,NSUserDefaults 也是一种非常方便和干净的方式来实现这一点。

谢谢。

于 2013-01-19T12:44:36.827 回答
1

如果您真的不需要存储计算值,而只是通知 tab2 中的另一个控制器该值已更改,则可以使用NSNotificationCenter发布一个NSNotification.
当您在 tab2 中初始化控制器时,您需要将其添加为通知的观察者。

类似的东西:
在tab1中:

NSNumber *value = nil; // the computed value
[[NSNotificationCenter defaultCenter]
 postNotificationName:@"com.company.app:ValueChangedNotification"
 object:self
 userInfo:@{@"value" : value}];

在 tab2 中:注册为观察者(在 init 或 viewDidLoad 方法中)

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(valueChanged:)
 name:@"com.company.app:ValueChangedNotification"
 object:nil];

发布通知时将调用的方法:

- (void)valueChanged:(NSNotification *)note
{
    NSDictionary *userInfo = note.userInfo;
    NSNumber *value = userInfo[@"value"];
    // do something with value
}

不要忘记在 viewDidUnload 或更早的时间从观察者中移除控制器:

[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2013-01-19T13:01:44.463 回答