我使用Xcode 7.3.1在Swift中编写应用程序以在iOS 9.3上运行。我是以编程方式创建UITextFields,但是当我点击其中一个时,它无法让它们接受焦点。以下是我创建每个UITextField的方法:
self.hoursField = UITextField()
self.hoursField!.borderStyle = UITextBorderStyle.Bezel
self.hoursField!.canBecomeFirstResponder()
self.hoursField!.canBecomeFocused()
self.hoursField!.delegate = self
self.hoursField!.enablesReturnKeyAutomatically = true
self.hoursField!.translatesAutoresizingMaskIntoConstraints = false
self.hoursField!.userInteractionEnabled = true
UITextFields正好出现在我想要的位置,看起来与我希望它们看起来完全一样,我只是不能让它们接受焦点,所以我可以在字段中编辑文本。
我正在实现UITextFieldDelegate协议中的所有方法,并从返回布尔值的所有方法返回true。
任何人都可以解释我做错了什么,或者没做错?
正在创建每个文本字段并将其添加到UIView的自定义子类中,该子类除了UITextField之外还包含几个UILabel。这是自定义视图的init方法的相关部分,用于创建文本字段:
init(frame: CGRect, charge: (code:String, note:String?, hours:Int)) {
super.init(frame: frame)
// Create the hours UITextField
self.hoursField = UITextField()
self.hoursField!.borderStyle = UITextBorderStyle.Bezel
self.hoursField!.canBecomeFirstResponder()
self.hoursField!.canBecomeFocused()
self.hoursField!.contentVerticalAlignment = UIControlContentVerticalAlignment.Center
self.hoursField!.delegate = self
self.hoursField!.enablesReturnKeyAutomatically = true
self.hoursField!.font = UIFont.systemFontOfSize(14)
self.hoursField!.keyboardType = UIKeyboardType.NumberPad
self.hoursField!.returnKeyType = UIReturnKeyType.Done
self.hoursField!.text = String(charge.hours)
self.hoursField!.textAlignment = NSTextAlignment.Right
self.hoursField!.translatesAutoresizingMaskIntoConstraints = false
self.hoursField!.userInteractionEnabled = true
// Add it to the view
self.addSubview(self.hoursField!)
// Create its layout constraints
let hoursTopMarginConstraint:NSLayoutConstraint = NSLayoutConstraint(item: self.hoursField!, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.codeLabel!, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
let hoursLeftMarginConstraint:NSLayoutConstraint = NSLayoutConstraint(item: self.hoursField!, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.codeLabel!, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: self.hourFieldIndent)
let hoursRightMarginConstraint:NSLayoutConstraint = NSLayoutConstraint(item: self.hoursField!, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.hoursField!, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: self.hourFieldWidth)
// Add the layout constraints to the view
self.addConstraints([hoursTopMarginConstraint, hoursLeftMarginConstraint, hoursRightMarginConstraint])
我的应用程序的简化版本显示我可以从https://github.com/ThomBrando/TextFieldDemo.git
下载的问题答案 0 :(得分:0)
你试过吗
self.hoursField!.becomeFirstResponder()
答案 1 :(得分:0)
当我以编程方式实现texfield时,我所要做的就是实例化texfield。 let field = UITextFeild()
设置其委托let field.delegate = self
extension UIViewController: UITextFieldDelegate {
public func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing(true)
return false
}
}
我从未使用过你尝试过的两条线。
.canBecomeFirstResponder
.conBecomeFocused
.enablesReturnKeyAutomatically
我建议删除那些。
然后,如果您在屏幕上点击其他任何地方时试图让键盘解除,我建议将其添加到扩展程序中以便将其添加到任何位置。
extension OnboardingPage {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)
}
然后,只需在hideKeyboardWhenTappedAround()
中致电viewDidLoad
即可进行操作。
希望有所帮助。 :)
答案 2 :(得分:0)
您能再给我们一些信息吗?就像你的UITextfield的框架一样?因为我复制了你的代码并且我有同样的问题但是当我为UITextfield添加一个框架时它对我来说很好。还只是想确保将文本字段作为子视图添加到其父视图中。
另外我建议尝试使用某个设备,如果你有一个设备,模拟器有时会出错并且事情无法正常工作
答案 3 :(得分:0)
我认为这是因为您在禁用键盘的情况下在模拟器上测试它。然后,模拟器将使用计算机的键盘,而不会显示iOS键盘。
您选择UITextField时可以尝试按Cmd-K吗?
答案 4 :(得分:0)
问题是这一行:
let frame:CGRect = CGRect(x: 0, y: totalContentHeight, width: 0, height: 0)
let chargeView:CustomView = CustomView(frame: frame, charge: charge)
因此,您的CustomView零宽度,零高度 - 零大小。因此,它的子视图都不可触摸。文本字段是其子视图。因此,它们不可触摸。它们是可见的,因为CustomView不会剪切到其边界;但是他们超出了他们的超级视角,所以他们不可触摸。
要证明这一点,只需将第一行改为:
let frame:CGRect = CGRect(x: 0, y: totalContentHeight, width: 500, height: 100)
那些不是"权利"数字,但这并不重要。关键是,你会发现你现在可以点击文本字段并输入它!所以这应该给你足够的线索开始。