我已经尝试了很多教程,以至于我想知道为什么我没有遇到这么简单的问题。我有一个名为 SetBudgetViewController 的视图控制器。我在此视图中有一个文本字段,我已将其连接为一个名为 *amountToSpend 的插座。我在应用程序的其他地方使用了另一个视图,它有一个名为 *amountSet 的标签。如何使输入到第一个文本字段中的数字显示在另一个视图的标签中?非常感谢你们(这让我发疯)!
4 回答
首先,在另一个视图控制器中声明一个属性:
@property (strong, nonatomic) NSString *amountToSpend;
在 SetBudgetViewController 中,在您的 -(void)prepareForSegue 方法中:
if([segue.identifier isEqualToString:@"YourIdentifier"])
{
OtherViewController *vc = segue.destinationViewController;
vc.amountToSpend = self.amountToSpend.text;
}
在另一个视图控制器中,在 viewDidLoad 中显示数量。
self.amountSet.text = self.amountToSpend;
编辑 2:在彼此不接近的 VC 之间传递数据的替代方法。您可以重复上述操作或使用 NSUserDefaults。
在 SetBudgetViewController 中输入金额后:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.amountToSpend.text forKey:@"AmountToSpend"];
[defaults synchronize];
在另一个视图控制器中,在 viewDidLoad 中显示数量。
self.amountSet.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"AmountToSpend"];
我希望这对您有用 首先查看在哪里设置用户默认值
.h 文件
@property(nonatomic,retain) IBOutlet UITextField *txtfield;
在 .m 文件中
@synthesize txtfield;
现在点击按钮
NSString * text = txtfield.text;
[NSUserDefault StandardUserDefault] setValue : text forKey : @"textfieldtext"];
根据需要推送您的视图或呈现模式
然后在下一个视图中写如下
label.text = [NSUserDefaults standardUserDefault]valueForKey :@"textfieldtext"];
由于您有很多教程,我想您在编码方面已经足够了,但对这些概念并不熟悉..
首先,由于这两个控件位于不同的视图控制器中,这意味着您必须在它们之间建立连接以帮助标签找出您在文本输入中输入的内容。连接可以是委托、通知或 plist 值,所以你会在这里找到很多解决方案。
对于你提到的这种情况,我建议委托解决方案。既然你有教程,试着找到委托部分并了解委托做什么以及为什么。
首先,您需要一种方法来了解用户何时在您的第一个文本视图中输入了某些内容。一种方法是实现 UITextField 委托并覆盖 textFieldDidBeginEditing 方法。
接下来,您需要获取输入的数据并将其发送到第二个 textView。一个简单的方法是使用 NSNotificationCenter。在您的第一个视图控制器中像这样使用它:
-(void) textFieldDidBeginEditing:(UITextField *)textField {
NSArray* objects = [[NSArray alloc] initWithObjects:[textField text], nil];
NSArray* keys = [[NSArray alloc] initWithObjects:@"text", nil];
NSDictionary* dict =[[NSDictionary alloc] initWithObjects:objects forKeys:keys];
[[NSNotificationCenter defaultCenter] postNotificationName:@"firstTextFieldEditted" object:nil userInfo:dict];
}
在您的其他视图控制器上,您需要在您的 init 方法中添加它:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modifySecondTextField:) name:@"firstTextFieldEditted" object:nil];
并创建以下方法:
- (void)modifySecondTextField:(NSNotification*) notification {
NSString* text = [dict objectForKey:@"text"];
// TODO - update your textfield here
}
如果您需要区分通知的发送者,只需执行
[[NSNotificationCenter defaultCenter] postNotificationName:@"firstTextFieldEditted" object:textField userInfo:dict]; -- notice object:textField. You can then differentiate them by their tag for example.
这样你就可以参考你的初始文本字段我希望这能让你很好地了解 NSNotificationCenter 是如何工作的。祝你好运。