我是一个机器人,最近开始学习迅捷。
我已经阅读了关于swift结构的教程,但现在让我头疼的是UI小部件
键盘覆盖文本字段。我怎样才能做到这一点,如果文本字段被覆盖,视图会被推高,但是当文本字段可见时,视图就不会做任何事情。我发现here的示例会将视图向上或向下推到键盘正上方,但推动视图不是我想要的。
如何在文本字段右侧显示错误图标?以及如何在键盘正上方添加额外的导航行以允许用户前进/前进和完成
我在对象库中找到了一个日期选择器,但它占用了大量空间。我想要的就像下面的截图。当用户点击某些内容时它会向上推动视图,然后在完成时消失。还有关于如何在键盘顶部放置额外导航栏的相同问题
我不知道它是否与Date Picker相同。我还想在触发事件时在底部显示一个列表。
请有人请帮帮我吗?或者直接找我正确的文章。在使用swift进行编码时,我发现自己在UI上真的很难:(
答案 0 :(得分:1)
快速修复: 您可以使用this,它是ViewController的子类,不会让键盘隐藏UITextField。 (关于链接的更多细节)
困难的方法:自己实现一个方法,当键盘显示时响应,获取其高度和文本域位置,然后移动viewController的视图。还有另一种方法可以在键盘解除时响应以恢复viewController的视图。
修改强> 对于textFields,它更好地放置文本字段的图像,或者可能在textField上(但是当有文本后面时它很难看)。该栏是附件视图,您可以在任何textField中使用,即使您使用的是DatePicker或PickerView。
对于Datepicker,here有一种简单的方法。
对于附件视图:
Swift代码
//TODO:First tag all textFields in your view, starting by 1.
//In your viewController
var textFields:[UITextField]? = nil //Class attribute
var activeTextField:UITextField? = nil //Class attribute
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
textFields = [UITextField]()
searchTextFields(self.view)
setAccessoryView()
}
//MARK: Helper functions
//Search for all textFields in your view (and subviews), if tag is greater than 0, connect delegate and append to ‘textFields’ array.
func searchTextFields(_view: UIView) {
for subView in _view.subviews {
if subView.isKindOfClass(UITextField) {
let textField = subView as UITextField
if textField.tag > 0 {
textField.delegate = self
textFields?.append(subView as UITextField)
}
} else if subView.isKindOfClass(UIView) {
searchTextFields(subView as UIView)
}
}
}
func setAccessoryView() {
if textFields != nil {
//Create buttons
let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
let ok = UIBarButtonItem(title: "OK", style: UIBarButtonItemStyle.Done, target: self, action: "okButtonAction")
//TODO: Place your own images
let next = UIBarButtonItem(image: UIImage(named: "setaDireita"), style: UIBarButtonItemStyle.Plain, target: self, action: "nextButton")
let previous = UIBarButtonItem(image: UIImage(named: "setaEsquerda"), style: UIBarButtonItemStyle.Plain, target: self, action: "previousButton")
//Order buttons
let itensToolbar = NSMutableArray(array: [previous, next, space, ok])
//Create toolbar
let toolbar: UIToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.frame.width, 0))
toolbar.barStyle = UIBarStyle.Default
toolbar.items = itensToolbar
toolbar.sizeToFit()
//Set toolbar
for textField in textFields! {
textField.inputAccessoryView = toolbar
}
}
}
//MARK: Actions AccessoryView
func okButtonAction() {
//You can do whatever you want
self.activeTextField?.resignFirstResponder()
}
func nextButton() {
if activeTextField?.tag != textFields?.last?.tag {
textFields?[activeTextField!.tag].becomeFirstResponder()
}
}
func previousButton() {
if activeTextField?.tag != textFields?.first?.tag {
textFields?[activeTextField!.tag - 2].becomeFirstResponder()
}
}
//MARK: UITextFieldDelegate
func textFieldDidBeginEditing(textField: UITextField) {
self.activeTextField = textField
let toolbar = textField.inputAccessoryView as UIToolbar
if textField.tag == textFields?.first?.tag {
(toolbar.items?[0] as UIBarButtonItem).enabled = false
(toolbar.items?[1] as UIBarButtonItem).enabled = true
} else if textField.tag == textFields?.last?.tag {
(toolbar.items?[0] as UIBarButtonItem).enabled = true
(toolbar.items?[1] as UIBarButtonItem).enabled = false
} else {
(toolbar.items?[0] as UIBarButtonItem).enabled = true
(toolbar.items?[1] as UIBarButtonItem).enabled = true
}
}
希望帮助你。