我的分段控制器有一个小问题,在单击新索引时尝试更改显示给用户的视图。我将代码设置为显示在更改索引时用户将键入的文本框。一个问题是我想将文本框均匀地放置在分段控制器下,另一个问题是当我单击控制器中的新索引时,先前的文本框仍在屏幕上,但是我需要它仅显示与选择的特定索引相关的文本框。下面显示的代码是我创建段控制器并处理索引切换以及文本框创建的代码。
let segmentedControl: UISegmentedControl = {
let sc = UISegmentedControl(items: ["Inventory", "Sale", "Expense"])
sc.selectedSegmentIndex = 0
sc.layer.cornerRadius = 9
sc.layer.borderWidth = 1
sc.layer.borderColor = UIColor.lightGray.cgColor
sc.layer.masksToBounds = true
sc.addTarget(self, action: #selector(handleSegmentChange), for: .valueChanged)
return sc
}()
//function to handle click of segmented control buttons
@objc fileprivate func handleSegmentChange(sender: UISegmentedControl){
print(segmentedControl.selectedSegmentIndex)
switch segmentedControl.selectedSegmentIndex{
case 0:
view.addSubview(myProduct)
case 1:
view.addSubview(myRetail)
default:
view.addSubview(myExpense)
break
}
}
let myProduct : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 10))
mp.placeholder = "Enter Product name"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
return mp
}();
let myRetail : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 20))
mp.placeholder = "Enter Retail price"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
return mp
}();
let myExpense : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 30))
mp.placeholder = "Enter Expense name"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
return mp
}();
我看到的大多数解决方案都已过时,这就是为什么我在这里发布自己的版本。预先感谢任何人都可以提供的帮助。
您可以如下设置每个tag
的UITextField
,
let myProduct : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 10))
mp.placeholder = "Enter Product name"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
mp.tag = 11
return mp
}()
let myRetail : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 20))
mp.placeholder = "Enter Retail price"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
mp.tag = 12
return mp
}()
let myExpense : UITextField = {
let mp = UITextField(frame: CGRect(x: 10, y: 320, width: 300, height: 30))
mp.placeholder = "Enter Expense name"
mp.borderStyle = UITextField.BorderStyle.line
mp.backgroundColor = .white
mp.textColor = .cyan
mp.tag = 13
return mp
}()
然后在handleSegmentChange
中,删除带有该标签的所有视图,然后添加如下所示的新视图,
//function to handle click of segmented control buttons
@objc fileprivate func handleSegmentChange(sender: UISegmentedControl){
print(segmentedControl.selectedSegmentIndex)
[11, 12, 13].forEach { self.view.viewWithTag($0)?.removeFromSuperview() }
switch segmentedControl.selectedSegmentIndex {
case 0:
view.addSubview(myProduct)
case 1:
view.addSubview(myRetail)
default:
view.addSubview(myExpense)
}
}
对于位置问题,您尚未将任何帧设置为UISegmentControl
。您可以如下设置frame
以显示结果,
let segmentedControl: UISegmentedControl = {
let sc = UISegmentedControl(items: ["Inventory", "Sale", "Expense"])
sc.selectedSegmentIndex = 0
sc.layer.cornerRadius = 9
sc.layer.borderWidth = 1
sc.layer.borderColor = UIColor.lightGray.cgColor
sc.layer.masksToBounds = true
sc.frame = CGRect(origin: CGPoint(x: 10, y: 280), size: CGSize(width: 300, height: 30))
sc.addTarget(self, action: #selector(handleSegmentChange), for: .valueChanged)
return sc
}()