我正在使用Swift 3.我有两个txtFields,其中一个用于电子邮件,另一个用于密码。我使用以下代码为电子邮件字段添加填充:
txtEmail.leftView = paddingView;
txtEmail.leftViewMode = .always
但是,当我将相同的应用程序应用于密码字段时,应用程序似乎会遇到无限循环:
txtPassword.leftView = paddingView;
txtPassword.leftViewMode = .always
我错过了什么?
答案 0 :(得分:0)
当您的代码显示时,您同时为两个文本字段使用相同的视图对象,这可能就是您的应用程序循环的原因。您不能同时为两个不同的文本字段添加相同的视图对象作为子视图。所以创建新的视图实例并将其设置为单个textfiled的填充。
let paddingForEmail = UIView(frame: CGRectMake(0, 0, 15,txtEmail.frame.size.height))
//Adding the padding to the Email textField
txtEmail.leftView = paddingForFirst
txtEmail.leftViewMode = UITextFieldViewMode .Always
//Create new padding object of view for second textField
let paddingForPassword = UIView(frame: CGRectMake(0, 0, 15,txtPassword.frame.size.height))
//Add padding to the Password textField
txtPassword.leftView = paddingForPassword
txtPassword.leftViewMode = UITextFieldViewMode .Always
希望这会对你有所帮助。
答案 1 :(得分:0)
这个UITextField扩展将在以后简化您的实现,并且应该解决与在多个文本字段上使用相同的UIView相关的任何问题:
extension UITextField {
func pad(_ amount: Int) {
self.leftView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.height))
self.leftViewMode = UITextFieldViewMode.always
}
}
然后您可以在viewDidLoad
中或在视图控制器的调用层次结构中的任何位置使用它。
txtEmail.pad(15)
txtPassword.pad(15)