我试图在我的第一个视图控制器中使用UITextField的.text,在我的第二个视图控制器中使用UITextField的另一个.text,但我的第一个视图控制器firstTField.text在我的第二个视图控制器中变为(null)即使我在我的第一个视图控制器中打印了_firstTField.text,它也打印出输入的输入。
可能是什么问题?为什么是null? 有人可以指导我如何处理/解决这个问题吗?
@property (weak, nonatomic) IBOutlet UITextField *firstTField;
@property (weak, nonatomic) IBOutlet UITextField *secondTField;
#import "FirstViewController.h"
- (void)viewDidLoad {
[super viewDidLoad];
FirstViewController *firstPage = [[FirstViewController alloc] init];
_secondTField.text = firstPage.firstTField.text;
}
答案 0 :(得分:2)
我将假设FirstViewController
偏向SecondViewController
。您的代码有两件事会阻止secondTField
设置其文本:
1)您正在实例化FirstViewController
的新实例,而不是引用您所引用的实例。此新FirstViewController
将不在视图层次结构中,因此不会设置其文本字段。
2)您需要在segue期间使用NSString
在SecondViewController
加载到视图层次结构中时暂时保留该信息。
您的代码将如下所示:
<强> FirstViewController.h 强>
@property (weak, nonatomic) IBOutlet UITextField *firstTField;
<强> SecondViewController.h 强>
@property (weak, nonatomic) IBOutlet UITextField *secondTField;
@property (strong, nonatomic) NSString *secondTFieldText; // temporary to hold the text from FirstViewController
<强> FirstViewController.m 强>
#import "SecondViewController.h"
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *secondViewController = (SecondViewController *)segue.destinationViewController;
secondViewController.secondTFieldText = self.firstTField.text;
}
<强> SecondViewController.m 强>
#import "FirstViewController.h"
- (void)viewDidLoad
{
[super viewDidLoad];
self.secondTField.text = self.secondTFieldText;
}
答案 1 :(得分:0)
我希望这可以帮到你
标记为IBOutlets的属性在视图控制器的视图加载并呈现给用户时分配。
因此,在您以某种方式显示视图控制器之前它为空。
在此代码中,您尚未将firstPage的视图添加到任何位置,因此它返回null。
- (void)viewDidLoad {
[super viewDidLoad];
FirstViewController *firstPage = [[FirstViewController alloc] init];
_secondTField.text = firstPage.firstTField.text;
}
答案 2 :(得分:0)
您的firstViewController的IBOutlets尚未初始化。创建一个字符串属性。设置它。然后在firstViewController的viewDidLoad中设置textField的text属性。