Ios Can';t通过uiviewcontroller和it的应用程序测试';s UITextField
我想检查(测试)一个UIViewController内部的UITextField是否成为第一响应者 以下是我的UIViewController代码:Ios Can';t通过uiviewcontroller和it的应用程序测试';s UITextField,ios,objective-c,unit-testing,testing,uiviewcontroller,Ios,Objective C,Unit Testing,Testing,Uiviewcontroller,我想检查(测试)一个UIViewController内部的UITextField是否成为第一响应者 以下是我的UIViewController代码: - (void)viewDidLoad { [super viewDidLoad]; [myUITextField becomeFirstResponder]; } 这是我的测试代码: - (void) testThatMyUITextFieldShouldBeFirstResponder { MyViewControll
- (void)viewDidLoad
{
[super viewDidLoad];
[myUITextField becomeFirstResponder];
}
这是我的测试代码:
- (void) testThatMyUITextFieldShouldBeFirstResponder {
MyViewController * ViewController =
[[MyViewController alloc] initWithNibName:nil bundle:nil];
if (MyViewController) {
[MyViewController loadView];
STAssertTrue(MyViewController.myUITextField.isFirstResponder, @"myUITextField is not first responder");
}
}
虽然行[myUITextField becomeFirstResponder]已正确执行,但isFirstResponder属性不正确
问题是什么?我如何解决它?问题是当de VC没有完成子视图的布局时,您在viewDidLoad中将其设置为第一响应者。按@viewDidLayoutSubviews、viewWillApear或viewDidapear执行。然后,@您的测试函数添加[MyViewController.view setNeedsLayout] 替换此mathed这将很好地工作,当您创建文本字段时,给它们标记5
-(void) testThatMyUITextFieldShouldBeFirstResponder
{
// get your textfield
for (UIView *view in self.view.subviews)
{
if ([view isKindOfClass:[UITextField class]])
{
UITextField *textField=(UITextField *)view;
// and get if yoyr textfield tag is 5
if ((textField.tag==5) &&[textField isFirstResponder])
{
NSLog(@"Your TextField is Firstrsponder");
}
}
}
}
试试这个:
使用PerformSelect:时可以避免这种情况,并可以解决此问题。我确信调用了view did load函数,但我不明白为什么myUITextField.isFirstResponder属性未设置为“是”!这根本没用!如果有多个文本字段,我知道我的文本字段。是的,有多个!正如我所说,我有权访问它。在这里,我更改了我的答案,并在您的代码中给文本字段标记5