我有一段时间修复一个错误,目前只有在我在模拟器上运行我的应用程序时才会发生。基本上,我有一个UITextView
我试图将消息endEditing
发送给。{1}}。如果我在用户编辑textview时发送消息(强制或其他),我会回到YES。但是,如果用户尚未开始编辑textview并发送消息endEditing:YES
,则会返回NO
。这甚至可能吗?不应该endEditing:YES
总是迫使视图结束编辑吗?
其他详细信息:我已经尝试将拥有类设置为uitextviews委托,但即使这样,shouldEndEditing
方法也不会被调用。
更新:这似乎不是正常行为(如果文本字段当前不是第一个响应者,则该方法应返回no。)
我创建了一个简单的测试:
AppDelegate.h
#import <UIKit/UIKit.h>
@interface DRAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (assign) IBOutlet UITextView *textView;
@property (assign) IBOutlet UIButton *endButton;
@property (assign) IBOutlet UILabel *results;
-(IBAction)tapEndEditingButton:(id)sender;
@end
和AppDelegate.m
-(void)tapEndEditingButton:(id)sender
{
BOOL didEndEditing = [self.window endEditing:YES];
NSString *result = (didEndEditing) ? @"YES" : @"NO";
_results.text = result;
}
无论文本字段是否具有焦点,无论我是否将endEditing的force参数设置为YES或NO,都将didEndEditing设置为YES。
答案 0 :(得分:1)
endEditing:
使视图(或其中一个嵌入的文本字段)重新签署第一个响应者状态。
...
返回值
YES
如果视图已退出第一响应者状态,或NO
如果它已经 不<强>讨论强>
此方法查看当前视图及其子视图层次结构 当前第一个响应者的文本字段。如果找到一个, 它要求文本字段作为第一响应者辞职。如果强制 参数设置为
YES
,文本字段永远不会被询问;它是 被迫辞职。
所以...当你说:
但是,如果用户尚未开始编辑textview,我发送消息endEditing:YES,我返回NO
它非常好,因为在您的方案中,由于没有firstResponder
辞职,因此调用-endEditing:
将返回NO
并且不会损害性能( isn&#39; ta,imho )
[UIView endEditing:YES/NO];
对象不是NO
, UIView
将返回firstResponder
。
示例:
-(void)testEndEditing
{
UIButton *btnTest = [UIButton buttonWithType:UIButtonTypeCustom];
[btnTest setFrame:CGRectMake(0, 130, 320, 44)];
[btnTest setBackgroundColor:[UIColor blueColor]];
[btnTest addTarget:self action:@selector(myEndEditing:)
forControlEvents:UIControlEventTouchUpInside];
[btnTest setTitle:@"End Editing" forState:UIControlStateNormal];
[self.view addSubview:btnTest];
UITextField *txtFTest = [[UITextField alloc] init];
[txtFTest setFrame:CGRectMake(0, 50, 320, 30)];
[txtFTest setBackgroundColor:[UIColor orangeColor]];
[txtFTest setText:@"textField"];
[self.view addSubview:txtFTest];
/*
globally declare "UITextView *txtVTest;"
*/
txtVTest = [[UITextView alloc] init];
[txtVTest setFrame:CGRectMake(0, 80, 320, 50)];
[txtVTest setBackgroundColor:[UIColor redColor]];
[txtVTest setText:@"textView"];
[self.view addSubview:txtVTest];
//make UITextField object the firstResponder
[txtFTest becomeFirstResponder];
}
-(void)myEndEditing:(UIButton *)sender
{
//test endEditing method on UITextView object
BOOL isWhat = [txtVTest endEditing:YES];
NSLog(@"%i",isWhat);
}
PS:如果textField
和textView
都不是firstResponder
,那么它会返回YES
( dunno为什么,但我会检查)