我正在开展一个项目,涉及UITabBarController
中的3个标签(全部在故事板中完成)。
每个标签都运行不同的视图控制器。
我在标签1上有一个按钮,用于执行计算并在文本框中返回结果。我想要它,以便当我点击计算时,结果也会在标签2的文本框中返回。
我不确定如何在UIViewController
之间传递数据,所以我们非常感谢您的帮助。
答案 0 :(得分:2)
按照vshall的说法你可以像bellow一样做这些: -
<强> 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
中,您可以在另一个选项卡中使用此变量来创建yourAppdelegat的对象。希望它可以帮助你
答案 1 :(得分:1)
您可以在app delegate中定义变量,并将结果存储在第一类的变量中。切换课程后,您可以通过创建appDelegate的实例并将其分配到文本字段来获取第2课中的该值。
正如Sanjit建议的那样,NSUserDefaults也是一种非常方便和干净的方法。
感谢。
答案 2 :(得分: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];