- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我在这个论坛上的第一个问题。我想知道如何仅在 UITextField 中包含文本时启用 UIBarButtonItem。我已经看到很多关于如何在 Swift 2 但不是 Swift 3 中执行此操作的示例。这是一个简单的应用程序,用于将一些数据保存到核心数据。除了 UIOutlets 等,我没有任何代码可以显示,因为我不确定如何动态检查 UITextField 中的文本。
最佳答案
这就是为什么我不建议使用 Interface Builder 和 Storyboards,开发人员会被“愚弄”。
无论如何,算法是这样的:
1) 文本字段具有用于文本字段事件(例如用户点击返回/完成键)的回调方法或“委托(delegate)”方法。
所以首先,您需要告诉您的文本字段委托(delegate)是您的 View Controller 。
2) 您定义必要的 UITextField 委托(delegate)方法 ( https://developer.apple.com/reference/uikit/uitextfielddelegate )
3) UITextField 有一个 hasText
方法(新适用于 iOS 10+)来判断您的文本字段是否有任何文本。如果有,则启用栏按钮项,否则禁用它。
您也可以使用 if let
可选绑定(bind)来解包 textField.text?
属性,然后检查 text.characters.count
是否大于 0,如下所示:
if let text = textField.text {
navigationItem.rightBarButtonItem?.isEnabled = text.characters.count > 0
}
这是传统的做法(在 iOS 10 之前,如果你想支持旧版 iOS 版本):D
完整代码如下:
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var myTextField:UITextField!
...
override func viewDidLoad() {
super.viewDidLoad()
// self is referring to this view controller
...
myTextField.returnKeyType = UIReturnKeyType.done
myTextField.delegate = self
}
// UITextField Delegate Methods
func textFieldDidEndEditing(_ textField: UITextField) {
// get the navigation bar button (right bar button in my case)
// and set its "isEnabled" property depending on whether
// the textField has any text using "hasText" of UITextField
navigationItem.rightBarButtonItem?.isEnabled = textField.hasText
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
hideKeybaord()
return false
}
// UITouches delegate methods for extra user experience polish
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// hides keyboard when user taps on the background
hideKeybaord()
}
// resusable hideKeyboard method
func hideKeybaord() {
myTextField.resignFirstResponder()
// in case you need to hide all other text fields in the future
// textField2.resignFirstResponder()
// textField3.resignFirstResponder()
}
}
关于ios - 检查 TextField 不为空后如何启用 UIBarItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106574/
这是我在这个论坛上的第一个问题。我想知道如何仅在 UITextField 中包含文本时启用 UIBarButtonItem。我已经看到很多关于如何在 Swift 2 但不是 Swift 3 中执行此操
使用自定义 View 创建 UIBarButtonItem 时,是否可以再次访问该自定义 View ,而不必在外部保留指针?例如: barButtonItem.customView 似乎没有这样的属性
点击 UIBarItem 时不会调用委托(delegate)方法。我经历了很多建议,所有的建议都和我写的一样。 我按照建议试了,没有解决办法。到处给委托(delegate)打电话。我做了每件事。 cl
iOS中UIBarItem中的setTitleTextAttributes:forState:如何使用? 你如何设置NSDictionary?无法使其工作,文档对此也不是很清楚。 来自文档: setT
是否可以在 UIBarItem 中使用 PDF 图像或其他矢量格式?每次我应用一个 .png 时,我都会为这么小的图片(30x26 像素)损失很多质量。 如果是的话,你能给我一个代码解释我如何实现它吗
我试图给我的 UIToolBar 一个标题,但是当我尝试添加一个带有 title 属性的 UIBarItem 时,我得到了这个错误。我的代码: UIBarItem *title = [[UIBarIt
当使用类代理自定义 UIButton 的外观时,UIBarItems 似乎最初采用为 UIButton 设置的自定义属性。 从使用 Core Data 的默认 Master/Detail 项目开始。在
请帮我找到以下问题的解决方案。 IOS,Xcode。 我有 UIBarItem 组件 - 工具栏上切换语言的按钮。该栏具有 initeWithImage(UIImage) 函数。问题是当我尝试缩放图像
我是一名优秀的程序员,十分优秀!