Ios 在UITextview中定位UIButton
我想在我的密码文本字段中放置一个“忘记”按钮。如果文本字段中没有任何内容,用户应该能够单击它,并弹出另一个ViewController。我唯一能做的就是你能在下面的图片中看到的。我的问题是按钮不可单击,并且它与占位符文本不在同一级别。有没有办法解决这两个问题Ios 在UITextview中定位UIButton,ios,swift,uibutton,uitextfield,Ios,Swift,Uibutton,Uitextfield,我想在我的密码文本字段中放置一个“忘记”按钮。如果文本字段中没有任何内容,用户应该能够单击它,并弹出另一个ViewController。我唯一能做的就是你能在下面的图片中看到的。我的问题是按钮不可单击,并且它与占位符文本不在同一级别。有没有办法解决这两个问题 let button = UIButton(type: .custom) button.setTitle("vergessen?", for: .normal) button.frame = CGRect(x: CG
let button = UIButton(type: .custom)
button.setTitle("vergessen?", for: .normal)
button.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(100), height: CGFloat(100))
button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
passwordTextField.rightView = button
passwordTextField.rightViewMode = .unlessEditing
您可以使用
故事板。为密码文本字段
和忘记按钮
创建一个助手视图
-将助手视图设置为与电子邮件TextField
相同的宽度和高度
-在助手视图中添加一个TextField
和一个按钮
,然后您可以决定密码TextField
宽度和忘记按钮的宽度。
-为文本字段
和按钮设置约束
我设置了绿色以了解辅助视图的功能
更新
我刚刚使用了你的代码,效果很好。再次检查你的文本字段约束。这是我用过的
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .system)
button.setTitle("vergessen?", for: .normal)
button.setTitleColor(#colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1), for: .normal)
button.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(100), height: CGFloat(100))
button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
textfFeld.rightView = button
textfFeld.rightViewMode = .unlessEditing
}
@objc func refresh(_ sender: Any) {
print("Hello")
}
我唯一的想法是将按钮类型从.custom
更改为.system
我建议创建一个xib
文件及其相关视图,用于包含按钮的文本项。因此,您将来可以在其他地方(本项目或其他项目)重用它
通过定义恒定高度(100),您将在不同的iOS设备中体验到丑陋和错位的UI。
以下是您应该做的:
为自定义UITextView
为其创建约束,以便其宽度和高度由其父级定义。还可以定义相对于UITextView
的UIButton
定义其(xib)相关的UIView
类
在故事板中使用它
在我的子类文件中,在该文件中添加另一个函数
// Modify the values as required
override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
let offset = -20
let width = 100
let height = width
let x = Int(bounds.width) - width - offset
let y = offset
let rightViewBounds = CGRect(x: x, y: y, width: width, height: height)
return rightViewBounds
}
现在可以删除下面的行
button.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(100), height: CGFloat(100))
输出
关于按钮点击事件。删除您提到的未连接代码
IBAction func refresh(_ sender: Any) { }
并在创建按钮的同一文件中添加以下代码
@objc func refresh() {
// your vc code here
print("in refresh")
}
上面的代码与您拥有的addTarget代码挂钩
button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
希望这有帮助。为函数添加代码self。刷新
您可以使用stackview。我将试着做一个例子。@chirag90我已经有了:IBAction func refresh(uSender:Any){},但它没有连接到任何东西。我必须在哪里调用self.refresh以及如何将iAction连接到按钮?如何更改文本字体和大小?对不起,这是一个新的功能。你所说的助手视图到底是什么意思?@Chris只是为了排列文本字段和按钮。首先放置视图,使其与电子邮件文本字段的尺寸相同,并在该视图中放置密码文本字段和忘记按钮。您是指堆栈视图吗?或者什么“观点”?:D@Chris只是一个普通的UIView。@Chis我刚刚更新了我的答案。检查您的文本字段约束。再次,完美的答案!谢谢您还可以告诉我如何更改按钮的文本大小和字体吗?:DTextsize和字体?是的,您可以执行button.titlelabel.Font=.systemFont(sizeOf:12),对于自定义字体,您可以执行button.titlelabel.Font=UIFont(名称:“OpenSans”,大小:20.0)