2015-02-10 63 views
1

我在iOS 8上构建应用程序。我有一个登录屏幕,用户输入用户名和密码。当他们输入了一个有效的用户名和密码时,他们被允许移动到下一个屏幕(一个按钮被启用,允许他们前进)。UITextField secureEntry不尊重clearsOnBeginEditing属性

我有逻辑写,告诉时启用或禁用自身的按钮,这是基于关闭UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

这个方法告诉我,当我的文本字段要改变自己文字 - 很简单。我已将密码文本字段的secureTextEntry属性设置为YES,并将其clearsOnBeginEditing属性设置为NO。

当我离开密码文本框然后回到它(通过单击它内部)并键入内容时,文本仍然被擦除。使事情变得更加复杂,shouldChangeCharactersInRange:replacementString:方法不会给我任何指示文本字段被清除(基于范围或替换字符串)。因此,我无法检测何时将继续按钮设置为禁用。

有什么想法?谢谢!

回答

1

好的,我发现了一个不同的设计解决方案的问题,我会自己回答。我最终什么事做的是消除与改变按钮状态的任何逻辑从shouldChangeCharactersInRange:replacementString:

(启用VS禁用)我不是让我的班UITextFieldTextDidChangeNotification观察员,然后在我传递时的方法进行我的按钮状态变化通知触发。这里是什么,订阅/退订该通知是这样的:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
    [[NSNotificationCenter defaultCenter]removeObserver:self]; 
} 

然后我就可以计算出在我的方法是这样改变什么文本字段:

- (void)textFieldDidChange:(NSNotification*)notification 
{ 
    UITextField *textField = (UITextField*)[notification object]; 
    //perform logic here, change button state, etc. 
} 

我承认,这可能不是这个问题是最好的(或唯一的)解决方案,但它确实能解决最初的问题。干杯!

0

您可以使用textFieldShouldClear方法作为UITextFieldDelegate的一部分来确定是否应该禁用继续按钮。

此外,您可以在此方法中返回NO,以防止在明确设置其属性不起作用时允许清除该字段。但是,您可能需要检查标记或以其他方式防止在用户名字段中禁用清除。

编辑: 看到这里列出的答案:https://stackoverflow.com/a/7305603/2845237

注:这将无法正常工作如果secureTextEntry = YES。默认情况下,无论清零,开始编辑是或否,iOS默认情况下都会在编辑之前清除安全条目文本字段的文本。

+0

感谢您的回答。然而,这对我不起作用。即使在实现了textFieldShouldClear之后,该方法在字段清除时也不会被调用。 – 2015-02-10 21:26:29

+1

从apple文档(关于textFieldShouldClear):“文本字段响应用户按下内置清除按钮来调用此方法(该按钮默认不显示,但可通过更改clearButtonMode属性中的值来启用)“由于我没有使用清除按钮,所以为什么不调用这个委托方法是有意义的。 – 2015-02-10 21:31:58

+0

我会说,阅读该链接中的答案会稍微清除一些情况。基本上,从用户体验的角度来看,安全的输入文本字段总是会在编辑时清除,因为用户几乎不可能知道该字段以前是什么东西,因为它无论如何都变成了黑色圆圈。既然如此,我想我们需要尝试一些不同的东西来阻止文本字段的清除。因此,为什么我认为我的解决方案是体面的。 – 2015-02-11 21:53:37

相关问题