我有一个地狱的时间修复一个错误,目前只有当我运行我的应用程序在模拟器上发生。本质上,我有一个UITextView,我试图将endEditing发送给它。如果我发送消息时,用户正在编辑文本视图(强迫或其他),我会得到肯定。但是,如果用户尚未开始编辑文本视图并发送消息endEditing:YES,则返回NO。难道这是可能的吗?endEditing:YES不应该总是强制视图结束编辑吗?
更多细节:我尝试过将拥有的类设置为uitextview委托,但即使这样,它看起来也不像是调用了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和附录代表。
-(void)tapEndEditingButton:(id)sender
{
BOOL didEndEditing = [self.window endEditing:YES];
NSString *result = (didEndEditing) ? @"YES" : @"NO";
_results.text = result;
}不管textfield是否有焦点,也不管我是否将endEditing的force参数设置为YES或NO,didEndEditing都被设置为YES。
发布于 2014-03-20 17:44:02
endEditing: 导致视图(或其嵌入式文本字段之一)放弃第一个响应状态。 .返回值 如果
YES视图辞职,则为第一个响应者状态,或NO如果没有。 讨论 此方法查看当前第一个响应程序的文本字段的当前视图及其子视图层次结构。如果它找到了一个,它会要求文本字段辞去第一个响应者的职务。如果将强制参数设置为YES,则文本字段甚至不会被问到;它将被迫辞职。
所以..。当你说:
但是,如果用户尚未开始编辑文本视图,并且我发送消息结束编辑:是的,我将返回否
这很好,因为在您的场景中,由于没有要辞职的firstResponder,调用-endEditing:将返回NO,并且不会损害性能(也不是bug,imho)
要回答问题的实质:
如果指定的[UIView endEditing:YES/NO];对象不是firstResponder,则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 (不知道为什么,但我会检查)
https://stackoverflow.com/questions/22540864
复制相似问题