我有一个我正在处理的项目,其中涉及 3 个选项卡UITabBarController
(全部在情节提要中完成)。
每个选项卡都运行在不同的视图控制器上。
我在选项卡 1 上有一个按钮,它执行计算并在文本框中返回结果。我想要这样当我点击计算时,结果也会在选项卡 2 的文本框中返回。
我不太确定如何在UIViewController
s 之间传递数据,因此不胜感激。
我有一个我正在处理的项目,其中涉及 3 个选项卡UITabBarController
(全部在情节提要中完成)。
每个选项卡都运行在不同的视图控制器上。
我在选项卡 1 上有一个按钮,它执行计算并在文本框中返回结果。我想要这样当我点击计算时,结果也会在选项卡 2 的文本框中返回。
我不太确定如何在UIViewController
s 之间传递数据,因此不胜感激。
根据 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 对象。希望它可以帮助你
您可以在应用程序委托中定义一个变量,并将结果存储在该变量中以用于第一类。一旦你切换了类,你就可以通过创建你的 appDelegate 的实例并将它分配给你的文本字段来在你的类 2 中获取该值。
正如 Sanjit 所建议的,NSUserDefaults 也是一种非常方便和干净的方式来实现这一点。
谢谢。
如果您真的不需要存储计算值,而只是通知 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];