ios swift-键盘(掩盖文本字段等)和其他一些小部件的问题
我是一个安卓人,最近开始学习swift 我已经阅读了有关swift结构的教程,但现在真正让我头疼的是UI小部件ios swift-键盘(掩盖文本字段等)和其他一些小部件的问题,ios,iphone,swift,Ios,Iphone,Swift,我是一个安卓人,最近开始学习swift 我已经阅读了有关swift结构的教程,但现在真正让我头疼的是UI小部件 键盘覆盖了文本字段。如果textfield被覆盖,但当textfield可见时什么也不做,如何使视图向上推。我发现的示例将视图向上或向下推到键盘正上方,但向下推视图并不是我想要的 我怎么能在文本字段的右边有这样的错误图标?以及如何在键盘上方添加一行额外的导航,以允许用户向后/向前并完成操作 我在对象库中找到了一个日期选择器,但它占用了很多空间。我想要的是下面的截图。当用户单击某个对象
//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
}
}
希望对您有所帮助。这与我在问题中发现的完全相同。即使有足够的空间,viewcontroller也会向下移动整个视图,这很容易。在ResponsiveTextFieldViewController上,如果self.keyboardFrame.intersects(self.activeTextField!.frame){self.arrangeViewOffsetFromKeyboard()},则将第71行替换为
,如果self.keyboardFrame.intersects(self.activeTextField!.frame){self.arrangeViewOffsetFromKeyboard()}或者{returnViewToInitialFrame()},则第135行替换为该
。如果textField不在主视图中,该类将无法帮助您。如果您希望我有自己的此类实现,可以解决此问题。噢,谢谢!我从下面的评论中找到了该教程中的解决方案。您知道textField和键盘上方导航中的错误消息吗?太棒了!让我试试明天就可以了。我一直在搜索下拉式或旋转式(如android)小部件。找不到任何小部件,所以我最终使用了tableview来显示选项列表。它看起来很难看,但既然我知道它叫PickerView
,我知道谷歌该怎么做了。谢谢!