简要地说:我有ViewController
两个UITextField
要素。当loginField为firstResponder时,之后
self.passwordField.becomeFirstResponder()
登录字段中的文本跳到左上角并返回。更奇怪的是:此故障仅在第一时间重现,然后您需要重新创建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
}
有没有人被这个错误困扰?有什么建议?
我的主视图是UIScrollView,为此我将底部空间更改为超级视图,因此即使显示键盘,用户也可以滚动所有内容
func keyboardWillShow(notification : NSNotification) {
let keyboardInfo = notification.userInfo!
let keyboardFrame = keyboardInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
let animDuration = keyboardInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue!
UIView.animateWithDuration(animDuration, animations: {
self.scrollViewBottom.constant = keyboardFrame.height
self.view.layoutIfNeeded()
let offsetY = CGRectGetMaxY(self.loginButton.frame) + 10 - self.scrollView.frame.height
if offsetY > 0 {
self.scrollView.contentOffset = CGPointMake(0, offsetY)
}
})
}
func keyboardWillHide(notification : NSNotification) {
self.scrollViewBottom.constant = 0
self.view.layoutIfNeeded()
}
当我在iOS7中发现键盘通知时,8和9会有很大的不同。因此,在iOS
9中,即使键盘不会显示/隐藏,在更改firstResponder时也会发送通知。另外,当我通过点击textField来更改firstResponder时(而不是在我的代码处理的键盘上点击Next),则只有KeyboardWillShow通知,而没有KeyboardWillHide。对于我来说,userInfo有一些垃圾帧值,这是使用next按钮更改第一响应者时的日志(工作正常,没有故障):
2015-10-07 12:54:13.870
keyboardWillHide:[UIKeyboardFrameBeginUserInfoKey:NSRect:{{0,352},{320,216}},UIKeyboardCenterBeginUserInfoKey:NSPoint:{160,460},UIKeyboardFrameEndUserInfoKey:NSRect:{{0,568
},{320、216}},UIKeyboardCenterEndUserInfoKey:NSPoint:{160、676},UIKeyboardAnimationDurationUserInfoKey:0.25,UIKeyboardIsLocalUserInfoKey:1,UIKeyboardBoundsUserInfoKey:NSRect:{{0,0},{320,216}},UIKeyboardAnimationCurveUserInfoKey
7] -10-07 12:54:13.896
keyboardWillShow:[UIKeyboardFrameBeginUserInfoKey:NSRect:{{0,352},{320,216}},UIKeyboardCenterBeginUserInfoKey:NSPoint:{160,460},UIKeyboardFrameEndUserInfoKey:NSRect:{{0,352}
,{320、216}},UIKeyboardCenterEndUserInfoKey:NSPoint:{160、460},UIKeyboardAnimationDurationUserInfoKey:0.25,UIKeyboardIsLocalUserInfoKey:1,UIKeyboardBoundsUserInfoKey:NSRect:{{0,0},{320,216}},UIKeyboardAnimationCurveUserInfoKey:7]
这是我点击第二个textField时的日志:
2015-10-07 12:55:13.879
keyboardWillShow:[UIKeyboardFrameBeginUserInfoKey:NSRect:{{0,352},{320,216}},UIKeyboardCenterBeginUserInfoKey:NSPoint:{160,460},UIKeyboardFrameEndUserInfoKey:NSRect:{{0,352
},{320、216}},UIKeyboardCenterEndUserInfoKey:NSPoint:{
160、460
},UIKeyboardAnimationDurationUserInfoKey:0.25,UIKeyboardIsLocalUserInfoKey:1,UIKeyboardBoundsUserInfoKey:NSRect:{{0,0},{320,216}},UIKeyboardAnimationCurveUserInfoKey:7
我发现我还有另一个键盘控制器,可以接收键盘通知并制作一些动画。那就是问题所在
根据您编辑的问题,当您点击键盘上的下一个按钮时,我会看到以下内容:
resignFirstResponder()
,然后becomeFirstResponder()
。这将调用keyboardWillHide
通知,然后keyboardWillShow
通知keyboardWillHide
有self.view.layoutIfNeeded()
没有动画的视图(和子视图-文本字段)布局。因此,文本字段的布局是“固定的”,并且当您在keyboardWillShow
文本字段中的文本中进行动画处理时,它不再“跳转”了,因为您在中进行了布局keyboardWillHide
。
但是,当您仅点击另一个文本字段时,仅会keyboardWillShow
被调用,布局不会在文本字段中“固定”,并且在为视图设置动画时,文本会产生“跳转”动画。
这就是为什么当您单击键盘上的“下一步”时,它不会跳转,而当您单击另一个文本字段时,它会跳转。
所以我建议将其更改为:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField === self.loginField {
self.passwordField.becomeFirstResponder()
return false
}
return true
}
func keyboardWillShow(notification : NSNotification) {
let keyboardInfo = notification.userInfo!
let keyboardFrame = keyboardInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
let animDuration = keyboardInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue!
self.loginField.layoutIfNeeded()
self.passwordField.layoutIfNeeded()
if keyboardFrame.height != self.scrollViewBottom.constant {
UIView.animateWithDuration(animDuration, animations: {
self.scrollViewBottom.constant = keyboardFrame.height
self.view.layoutIfNeeded()
let offsetY = CGRectGetMaxY(self.loginButton.frame) + 10 - self.scrollView.frame.height
if offsetY > 0 {
self.scrollView.contentOffset = CGPointMake(0, offsetY)
}
})
}
}
问题内容: 如何检测textField中的任何文本更改?委托方法适用于某些东西,但不能完全满足我的需要。因为直到返回YES,否则textField文本不可用于其他观察者方法。 例如在我的代码中没有得到更新的文本,用户已经输入了。 他们获得Java事件处理程序之类的方法是什么。 问题答案: 从正确的方式做uitextfield文本更改回调: 我捕获了发送到UITextField控件的字符,如下所示:
本文向大家介绍JavaScript实现自动跳转文本功能,包括了JavaScript实现自动跳转文本功能的使用技巧和注意事项,需要的朋友参考一下 贴一段自动跳转文本的代码实现: 实现代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
navigateToMiniProgram 基础库1.3.9开始支持,iOS版本2.1.23,Android版本2.1.38 navigateToMiniProgram(Object object) 打开另一个小程序 参数 Object object 属性 类型 默认值 必填 说明 appId string 是 要打开的小程序 appId path string 否 打开的页面路径,如果为空则打开
问题内容: 以下代码是否有替代方法: 如果我正在处理一个巨大的文本文件,其行数未知但长度不同,并且需要跳转到特定行我事先知道哪个号码?当我知道我至少可以忽略文件的前半部分时,我很难一一处理它们。寻找更优雅的解决方案(如果有)。 问题答案: 行缓存: 该模块允许人们从Python源文件中获取任何行,同时尝试使用缓存在内部进行优化,这是从单个文件读取许多行的常见情况。模块使用它来检索源行以包含在格式化
我在flutter上开发一个应用程序,在主屏幕上我有一个按钮,打开另一个屏幕,这是在一个方法。在那个屏幕上,我想做一些计算,比如接受用户输入和更新文本字段,在单击按钮时,方法calculateAmount被称为更新变量total,它反映在文本字段上,但文本字段没有更新,它只在按键盘上完成时更新...如何才能完成这个任务。下面是我的代码:
UITextField-Shake 是 UITextField 类添加了一个震动的动画,就像 OSX 登录界面的密码字段。