- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
使用 UITextFieldDelegate
,我根据 3 个 UITextFields
是否包含信息来禁用我的 UIButton
“btnSignup”。目前,它的工作正常减去 UIButton
react 的事实(再次运行 if
语句),我必须点击 UITextField
。当我输入内容并返回删除它时也是如此。 UIButton
保持事件状态,直到我点击 UITextField
(如果我点击提交而不点击其他地方,我可以提交,但事实并非如此。)
class MainVC: UIViewController, UITextFieldDelegate {
@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self
func textFieldDidBeginEditing(textField: UITextField) {
if countElements(receiveName.text) > 0 && countElements(receiveEmail.text) > 0 && countElements(receivePhone.text) > 0 {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
}
}
我正在寻找一种能够提供更实时效果的解决方案。如果 UITextField 在任何时候被编辑,该函数应该监听和响应。
最佳答案
使用与您的代码接近的东西,我可以按如下方式执行此操作。我添加了 3 个级别。用于记录文本字段是否输入了内容的变量。我在文本字段中添加了标签。我更改了 UITextFieldDelegate 类 func 并测试了所有三个字段都有文本。当您在第三个字段中输入一个字段时,按钮会亮起!
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
var receiveNameBool = false
var receiveEmailBool = false
var receivePhoneBool = false
@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self
}
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
if textField.tag == 1 {
receiveNameBool = true
} else if textField.tag == 2 {
receiveEmailBool = true
} else if textField.tag == 3 {
receivePhoneBool = true
}
if receiveNameBool && receiveEmailBool && receivePhoneBool {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
return true
}
}
好的,在第二个版本中,我使用了您使用的 textFieldDidBeginEditing 函数。在这种情况下,您在第三个字段中单击的第二个按钮已启用。在这两个示例中,如果用户删除了他们输入的数据,您仍然需要编写代码来处理这种情况。但是上面的第一个示例可以满足您的需求。
导入 UIKit
class ViewController: UIViewController, UITextFieldDelegate {
var receiveNameBool = false
var receiveEmailBool = false
var receivePhoneBool = false
@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self
}
func textFieldDidBeginEditing(textField: UITextField) {
if textField.tag == 1 {
receiveNameBool = true
} else if textField.tag == 2 {
receiveEmailBool = true
} else if textField.tag == 3 {
receivePhoneBool = true
}
if receiveNameBool && receiveEmailBool && receivePhoneBool {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
}
}
关于ios - 禁用带有 textFieldDidBeginEditing 的 UIButton 需要单击 UITextField 才能生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985169/
我正在开发一个应用程序,我在其中为应用程序的每个功能创建了模块。我必须从一个模块 UI Controller 切换到另一个模块 UI Controller 。 我在模块中有 UIController,
我的头文件 MyClass.h @interface MyClass : UIViewController { } @property (retain, nonatomic) IBOutlet UIT
当我使用这个方法时 -(void)textFieldDidBeginEditing:(UITextField *)textField 它给我一个错误 使用未声明的标识符“textFieldDidBeg
我有一个应用程序,在显示键盘的情况下我必须向上滚动。为了获得键盘大小,我正在注册 UIKeyboardWillShowNotification 事件,如下所示: [[NSNotification
我有一个 UIView,它包含另一个名为 contentView 的 UIView 对象。在 contentView 中,我有几个 UITextField 对象。为了使当前编辑的 UITextFiel
我在静态单元格 tableView 上有一个名为 textField 的 UItextField。该字段包含货币金额 - 例如“$10,000.00”。 编辑该金额时,货币和千位分组符号有点碍事。因此
我有一个包含三个 View 的项目,它们都是多个文本字段,在点击时调用 UIPickerView。我有两个 View 工作得很好,但是当我开始第三个 View 时,我无法调用 textFieldDid
我从 this 得到了下面的代码所以问题。当我开始编辑时,我试图向上滑动文本字段(因为否则它们会被 iPhone 键盘覆盖)。但是,日志语句显示未调用 textFieldDidBeginEditing
我有一个简单的 UITableViewController,它有 6 行,每行都有一个 UITextField。我希望能够单击每一行并将键盘应用于每一行。一切正常,除了出于某种原因我必须在每一行上单击
textFieldDidBeginEditing 和 textFieldShouldBeginEditing 之间的确切区别是什么。我想知道我们在哪种情况下使用它们(我知道当我们在文本字段中输入任何内
我在我的应用程序中使用 -(void)textFieldDidBeginEditing:(UITextField *)sender 这个函数。当我选择文本字段时,不会调用此函数。这是代码... -(v
如何将方法 textFieldDidBeginEditing 和 textFieldDidEndEditing 与苹果默认的 TextField 结构一起使用。 最佳答案 TextField 具有 o
我有动态tableView .几个单元格有 textField . UITextField *textField = [[UITextField alloc] initWithFrame:CGRect
我有一个复杂的问题,我正在解决越来越多的问题 :-) 我有一个嵌入式表格 View 。如果表格更改为编辑模式并且应编辑屏幕底部的某些文本字段,则它们隐藏在键盘后面。 我现在子类化了 UITableVi
这是我的代码: 在.h文件中 @interface VTViewController : UIViewController 在.m文件中 - (void)viewDidLoad { [sup
[myTextField becomeFirstResponder]; [myTextField resignFirstResonder]; 当我这样做 -(BOOL)textFieldShouldR
我将 UITextField 放在 UITableViewCell 中,并希望突出显示 tableViewCell 并且未选择的 tableViewCell 变为原始颜色,如果用户在每个 UIText
您可以将此视为我之前帖子的后续问题。 我已经编写了一个逻辑,只要它隐藏在键盘后面,我就可以向上移动文本字段。截至目前,我正在考虑键盘将覆盖所有设备底部 40% 的屏幕,因此根据设备大小移动文本字段。这
使用 UITextFieldDelegate,我根据 3 个 UITextFields 是否包含信息来禁用我的 UIButton“btnSignup”。目前,它的工作正常减去 UIButton rea
我制作了一个 Collection View ,其中填充了文本字段。我已经让 textFieldDidBeginEditing 正常工作了。我已将单元格中的文本字段分配给索引路径中的项目作为委托(de
我是一名优秀的程序员,十分优秀!