首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >[UIView结束编辑:是的]是否应该返回否?

[UIView结束编辑:是的]是否应该返回否?
EN

Stack Overflow用户
提问于 2014-03-20 17:34:35
回答 1查看 2.5K关注 0票数 3

我有一个地狱的时间修复一个错误,目前只有当我运行我的应用程序在模拟器上发生。本质上,我有一个UITextView,我试图将endEditing发送给它。如果我发送消息时,用户正在编辑文本视图(强迫或其他),我会得到肯定。但是,如果用户尚未开始编辑文本视图并发送消息endEditing:YES,则返回NO。难道这是可能的吗?endEditing:YES不应该总是强制视图结束编辑吗?

更多细节:我尝试过将拥有的类设置为uitextview委托,但即使这样,它看起来也不像是调用了shouldEndEditing方法。

更新:这似乎不是正常的行为(如果文本字段当前不是第一个响应者,则该方法应该返回no )。

我创建了一个简单的测试:

AppDelegate.h

代码语言:javascript
运行
复制
#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

和附录代表。

代码语言:javascript
运行
复制
-(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。

EN

回答 1

Stack Overflow用户

发布于 2014-03-20 17:44:02

检查苹果文件在UIView上的应用

endEditing: 导致视图(或其嵌入式文本字段之一)放弃第一个响应状态。 .返回值 如果YES视图辞职,则为第一个响应者状态,或NO如果没有。 讨论 此方法查看当前第一个响应程序的文本字段的当前视图及其子视图层次结构。如果它找到了一个,它会要求文本字段辞去第一个响应者的职务。如果将强制参数设置为YES,则文本字段甚至不会被问到;它将被迫辞职。

所以..。当你说:

但是,如果用户尚未开始编辑文本视图,并且我发送消息结束编辑:是的,我将返回否

这很好,因为在您的场景中,由于没有要辞职的firstResponder,调用-endEditing:将返回NO,并且不会损害性能(也不是bug,imho)

要回答问题的实质:

如果指定的[UIView endEditing:YES/NO];对象不是firstResponder,则UIView将返回firstResponder

示例:

代码语言:javascript
运行
复制
-(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];
}
代码语言:javascript
运行
复制
-(void)myEndEditing:(UIButton *)sender
{
    //test endEditing method on UITextView object
    BOOL isWhat = [txtVTest endEditing:YES];
    NSLog(@"%i",isWhat);
}

PS:如果textFieldtextView都不是firstResponder,那么它返回YES (不知道为什么,但我会检查)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22540864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档