use*_*732 47 uitextfield ios swift
我有ViewController2个UITextField元素:登录和密码.我为这些字段设置了委托,其中包括以下代码:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField === self.loginField {
self.loginField.resignFirstResponder()
self.passwordField.becomeFirstResponder()
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)
当他按下键盘上的"下一步"按钮时,此逻辑应将用户从登录文本字段切换为密码.但是我坚持了一个小故障:之后
self.passwordField.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)
登录字段中的文本跳转到左上角和后退.而且更奇怪的是:这个故障只是第一次再现,然后你需要重新创建ViewController才能观察到这种行为
这是故障的视频http://tinypic.com/player.php?v=6nsemw%3E&s=8#.VgVb3cuqpHx
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField === self.loginField {
self.loginField.resignFirstResponder()
// Shitty workaround. Hi, Apple!
self.loginField.setNeedsLayout()
self.loginField.layoutIfNeeded()
self.passwordField.becomeFirstResponder()
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 52
基于此处发布的其他一些想法,这是一个易于实现的解决方案,适用于所有情况(对我来说),并且似乎没有任何副作用:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
// Workaround for the jumping text bug.
[textField resignFirstResponder];
[textField layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)
如果您以编程方式从下一个字段开始,-textFieldShouldReturn:或者如果用户只是触摸另一个响应者,则此解决方案都可以使用.
lia*_*ols 17
在UITextField子类中,您可以执行以下操作:
-(BOOL)resignFirstResponder
{
BOOL resigned = [super resignFirstResponder];
[self layoutIfNeeded];
return resigned;
}
Run Code Online (Sandbox Code Playgroud)
这里的诀窍是确保你在被叫layoutIfNeeded 之后 resignFirstResponder打电话.
这样做是非常方便的,因为你不需要自己调用resignFirstResponder委托回调,因为这导致我内部的问题UIScrollView,但上面却没有:)
使用此代码可以避免UITextField中的文本跳转.
- (BOOL) textFieldShouldReturn:(UITextField *)textField{
if(textField == self.txtUserName){
[self.txtEmail becomeFirstResponder];
}
else if (textField == self.txtEmail){
[self.txtPassword becomeFirstResponder];
}
else if (textField == self.txtPassword){
[self.txtConfirmPassword becomeFirstResponder];
}
else if (textField == self.txtConfirmPassword){
[self.txtFirstName becomeFirstResponder];
}
else{
[textField resignFirstResponder];
}
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
[textField layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)
func textFieldDidEndEditing(_ textField: UITextField) {
textField.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
我也面临同样的问题.以下代码适用于我.
func textFieldDidEndEditing(_ textField: UITextField) {
textField.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
我不给我的文本字段委托。相反,我创建一个 IBAction 并将其附加到“退出时结束”事件。此方法也会出现故障,但仅限于 iOS 9。它看起来是一个操作系统错误。
我的动作看起来像这样:
@IBAction func textFieldAction(sender: UITextField) {
if sender === usernameField {
passwordField.becomeFirstResponder()
}
}
Run Code Online (Sandbox Code Playgroud)
通过上面的操作,故障发生了,但是当我执行下面的操作时,故障就消失了:
@IBAction func textFieldAction(sender: UITextField) {
if sender === usernameField {
sender.resignFirstResponder()
passwordField.becomeFirstResponder()
}
}
Run Code Online (Sandbox Code Playgroud)
看来我不需要打电话了setNeedsLayout()。
| 归档时间: |
|
| 查看次数: |
8586 次 |
| 最近记录: |