- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 UITableViewController
,它有 6 行,每行都有一个 UITextField
。我希望能够单击每一行并将键盘应用于每一行。一切正常,除了出于某种原因我必须在每一行上单击两次以使响应者激活下一个 UITextField
。我输入了 UITextFieldDelegate
打印输出,它们的操作顺序似乎是错误的。每个 TextFields
都被标记为 0 - 5。当我选择第一个时,没有问题,键盘出现,我输入了一些东西。我的打印输出是:
textFieldShouldBeginEditing 标签:0
textFieldDidBeginEditing 标签:0
然后我选择下一行(没有点击键盘上的“完成”),打印输出是这样的:
textFieldShouldBeginEditing 标签:1
textFieldShouldEndEditing 标签:0
textFieldDidEndEditing 标签:0
为什么 textFieldDidBeginEditing
没有被调用?
这是我的代码以防有帮助:
class EstimateCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var estimateField: UITextField!
// callback to alert when user clicked "Done"
var doneTextFieldInput: ((cell: EstimateCell, newText:String?) -> Void)?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
// self.selectionStyle = .None
estimateField.delegate = self
estimateField.clearsOnBeginEditing = true
// add a done button to the numberpad
addDoneButtonOnNumpad(estimateField)
// add some padding to the right margin
estimateField.layer.sublayerTransform = CATransform3DMakeTranslation(-20, 0, 0)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
/**
Only allow 4 digits
*/
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// only allow 4 digits max
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
let isMax4digits = newLength <= 5
return isMax4digits
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
print("textFieldShouldBeginEditing \(textField.tag)")
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
textField.text = ""
print("textFieldDidBeginEditing \(textField.tag)")
}
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
print("textFieldShouldEndEditing \(textField.tag)")
return true
}
/**
Called after the textfield resigns as the first responder
*/
func textFieldDidEndEditing(textField: UITextField) {
print("textFieldDidEndEditing \(textField.tag)")
doneTextFieldInput?(cell: self, newText: textField.text)
// textField.resignFirstResponder()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
print("textFieldShouldReturn")
textField.resignFirstResponder()
return true
}
/**
Adds a toolbar with a Done button as an input accessory view to the given textfield. Calls
resignFirstResponder when Done is clicked.
*/
func addDoneButtonOnNumpad(textField: UITextField)
{
let keypadToolbar: UIToolbar = UIToolbar()
// add a done button to the numberpad
keypadToolbar.items=[
UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: textField, action: #selector(UITextField.resignFirstResponder)),
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)
]
keypadToolbar.sizeToFit()
// add a toolbar with a done button above the number pad
textField.inputAccessoryView = keypadToolbar
}
}
最佳答案
我想通了。问题是我在 textFieldDidEndEditing()
的回调中调用了 tableView.reloadData()
。这导致设置我的 textfield.delegate = self
的代码再次触发,这是在调用 textFieldShouldBeginEditing()
之前完成的。希望有一天这可以帮助其他人:不要从 textFieldDidEndEditing()
中重新加载您的 tableview。
关于swift - 已调用 textFieldShouldBeginEditing,未调用 textFieldDidBeginEditing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41458120/
我正在开发一个应用程序,我在其中为应用程序的每个功能创建了模块。我必须从一个模块 UI Controller 切换到另一个模块 UI Controller 。 我在模块中有 UIController,
我的头文件 MyClass.h @interface MyClass : UIViewController { } @property (retain, nonatomic) IBOutlet UIT
当我使用这个方法时 -(void)textFieldDidBeginEditing:(UITextField *)textField 它给我一个错误 使用未声明的标识符“textFieldDidBeg
我有一个应用程序,在显示键盘的情况下我必须向上滚动。为了获得键盘大小,我正在注册 UIKeyboardWillShowNotification 事件,如下所示: [[NSNotification
我有一个 UIView,它包含另一个名为 contentView 的 UIView 对象。在 contentView 中,我有几个 UITextField 对象。为了使当前编辑的 UITextFiel
我在静态单元格 tableView 上有一个名为 textField 的 UItextField。该字段包含货币金额 - 例如“$10,000.00”。 编辑该金额时,货币和千位分组符号有点碍事。因此
我有一个包含三个 View 的项目,它们都是多个文本字段,在点击时调用 UIPickerView。我有两个 View 工作得很好,但是当我开始第三个 View 时,我无法调用 textFieldDid
我从 this 得到了下面的代码所以问题。当我开始编辑时,我试图向上滑动文本字段(因为否则它们会被 iPhone 键盘覆盖)。但是,日志语句显示未调用 textFieldDidBeginEditing
我有一个简单的 UITableViewController,它有 6 行,每行都有一个 UITextField。我希望能够单击每一行并将键盘应用于每一行。一切正常,除了出于某种原因我必须在每一行上单击
textFieldDidBeginEditing 和 textFieldShouldBeginEditing 之间的确切区别是什么。我想知道我们在哪种情况下使用它们(我知道当我们在文本字段中输入任何内
我在我的应用程序中使用 -(void)textFieldDidBeginEditing:(UITextField *)sender 这个函数。当我选择文本字段时,不会调用此函数。这是代码... -(v
如何将方法 textFieldDidBeginEditing 和 textFieldDidEndEditing 与苹果默认的 TextField 结构一起使用。 最佳答案 TextField 具有 o
我有动态tableView .几个单元格有 textField . UITextField *textField = [[UITextField alloc] initWithFrame:CGRect
我有一个复杂的问题,我正在解决越来越多的问题 :-) 我有一个嵌入式表格 View 。如果表格更改为编辑模式并且应编辑屏幕底部的某些文本字段,则它们隐藏在键盘后面。 我现在子类化了 UITableVi
这是我的代码: 在.h文件中 @interface VTViewController : UIViewController 在.m文件中 - (void)viewDidLoad { [sup
[myTextField becomeFirstResponder]; [myTextField resignFirstResonder]; 当我这样做 -(BOOL)textFieldShouldR
我将 UITextField 放在 UITableViewCell 中,并希望突出显示 tableViewCell 并且未选择的 tableViewCell 变为原始颜色,如果用户在每个 UIText
您可以将此视为我之前帖子的后续问题。 我已经编写了一个逻辑,只要它隐藏在键盘后面,我就可以向上移动文本字段。截至目前,我正在考虑键盘将覆盖所有设备底部 40% 的屏幕,因此根据设备大小移动文本字段。这
使用 UITextFieldDelegate,我根据 3 个 UITextFields 是否包含信息来禁用我的 UIButton“btnSignup”。目前,它的工作正常减去 UIButton rea
我制作了一个 Collection View ,其中填充了文本字段。我已经让 textFieldDidBeginEditing 正常工作了。我已将单元格中的文本字段分配给索引路径中的项目作为委托(de
我是一名优秀的程序员,十分优秀!