gpt4 book ai didi

ios swift - 键盘(掩盖文本字段等)和其他一些小部件的问题

转载 作者:行者123 更新时间:2023-11-28 05:29:41 27 4
gpt4 key购买 nike

我是一个 android 人,最近开始学习 swift。

我已经完成了关于swift结构的教程,但现在真正让我头疼的是UI小部件

  1. 键盘遮住了文本框。如果文本字段被覆盖但在文本字段可见时不执行任何操作,我怎样才能做到这一点。我找到的例子here会将 View 向上或向下推到恰好在键盘上方,但向下推 View 不是我想要的。

  2. 我怎样才能像这样在文本字段中的右侧显示错误图标?以及如何在键盘上方添加额外的导航行以允许用户后退/前进和完成 enter image description here

  3. 我在对象库中找到了一个日期选择器,但是它占用了很多空间。我想要的就像下面的截图。当用户点击某物时,它会向上推 View ,然后在完成后消失。还有关于如何在键盘顶部添加额外的导航栏的相同问题 enter image description here

  4. 我不知道它是否与日期选择器相同。我还希望在触发事件时在底部显示一个列表。

有人可以帮帮我吗?或指导我阅读正确的文章。我发现自己在用 swift 编码时在 UI 上真的很难 :(

最佳答案

快速修复:您可以使用 this ,它是 ViewController 的子类,不会让 UITextFields 被键盘隐藏。 (有关链接的更多详细信息)

困难的方法:自己实现一个方法,当键盘显示时响应,获取它的高度和文本框位置,然后移动 viewController 的 View 。以及另一种在关闭键盘时响应以恢复 viewController View 的方法。

编辑:对于 textFields,最好将图像放在 textfield 的右边,或者放在 textField 上(但是当后面有文本时它很难看)。该栏是一个附属 View ,您可以在任何文本字段中使用,即使您使用的是 DatePicker 或 PickerView。

对于日期选择器,here有一个简单的方法。

对于附件 View :

快速代码

//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
}
}

希望对你有帮助。

关于ios swift - 键盘(掩盖文本字段等)和其他一些小部件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29266069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com