Ios DropDownlist在cell swift的每个文本字段中显示
我定制了一个显示“下拉菜单”的Ios DropDownlist在cell swift的每个文本字段中显示,ios,swift,Ios,Swift,我定制了一个显示“下拉菜单”的UITextField。但是如果我在textField中写入,那么单元格的每个textField都会突然显示下拉列表。还有一个问题。我在stackView中有一个textfield。这个stackView位于cardwiew中(用于阴影)。这个cardwiew在单元格中。如何将此suggestionTable添加到单元格中,而不是使用super.super.super.addSuView(suggestionTable)添加到单元格中 open class Sugg
UITextField
。但是如果我在textField
中写入,那么单元格的每个textField
都会突然显示下拉列表。还有一个问题。我在stackView
中有一个textfield
。这个stackView
位于cardwiew
中(用于阴影)。这个cardwiew
在单元格中。如何将此suggestionTable
添加到单元格中,而不是使用super.super.super.addSuView(suggestionTable)
添加到单元格中
open class SuggestionTextField: UITextField, UITextFieldDelegate {
var identifier = "SuggestionCell"
var suggestionTable:UITableView!
var suggestionlist = ["First","Second","Third","Four","Fifth","Sixth","Seven","eight","Nine","Ten"]
var filterSuggestionlist = [String]()
var heightConstraint:NSLayoutConstraint!
var defaultShow = true {
didSet {
self.suggestionTable.reloadData()
}
}
convenience init() {
self.init(
frame: CGRect.zero)
self.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(filterSuggestions), name: NSNotification.Name.UITextFieldTextDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(filterSuggestions), name: NSNotification.Name.UITextFieldTextDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
func keyboardWillShow(_ notification: Notification) {
let keyboardFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
guard let frame = self.superview?.convert(self.frame, to: UIApplication.shared.keyWindow) else { return }
//guard let frame = self.superview?.convert(self.frame, to: nil) else { return }
let gap = (UIScreen.main.bounds.size.height - frame.origin.y - frame.height - keyboardFrame.height)
guard suggestionTable != nil else {
return
}
heightConstraint.constant = gap
}
func keyboardWillHide(_ notification: Notification) {
}
func filterSuggestions(){
self.setup()
if (self.text?.isEmpty)! {
self.defaultShow = true
return
}
filterSuggestionlist = suggestionlist.filter({ (suggestion) -> Bool in
return suggestion.contains(self.text!)
})
self.defaultShow = false
}
func setup(){
guard suggestionTable == nil else {
return
}
suggestionTable = UITableView()
suggestionTable.allowsSelection = true
suggestionTable.dataSource = self
suggestionTable.delegate = self
suggestionTable.estimatedRowHeight = 40
suggestionTable.rowHeight = UITableViewAutomaticDimension
// suggestionTable.layer.masksToBounds = false
// suggestionTable.clipsToBounds = false
suggestionTable.contentInset = UIEdgeInsets.zero
suggestionTable.separatorStyle = .none
suggestionTable.layer.cornerRadius = 3
suggestionTable.layer.shadowColor = UIColor.black.cgColor
suggestionTable.layer.shadowOffset = CGSize(width: 2, height: 3)
suggestionTable.layer.shadowOpacity = 0.5
suggestionTable.showsVerticalScrollIndicator = true
suggestionTable.translatesAutoresizingMaskIntoConstraints = false
suggestionTable.register(suggestionCell.self, forCellReuseIdentifier: identifier)
superview?.superview?.superview?.superview?.addSubview(suggestionTable)
superview?.superview?.superview?.superview?.bringSubview(toFront: suggestionTable)
setupConstrain()
}
func setupConstrain(){
let leftConstraint = NSLayoutConstraint(item: suggestionTable, attribute: .left, relatedBy: .equal, toItem: self, attribute: .left, multiplier: 1, constant: 0)
let rightConstraint = NSLayoutConstraint(item:
suggestionTable, attribute: .right, relatedBy: .equal, toItem: self, attribute: .right, multiplier: 1, constant: 0)
let topConstraint = NSLayoutConstraint(item: suggestionTable, attribute: .top, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1, constant: 2)
heightConstraint = NSLayoutConstraint(item: suggestionTable, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 200)
NSLayoutConstraint.activate([leftConstraint, rightConstraint, topConstraint, heightConstraint])
}
func removeSuggestionView(){
guard suggestionTable != nil else {
return
}
suggestionTable.removeFromSuperview()
suggestionTable = nil
}
public func textFieldDidBeginEditing(_ textField: UITextField) {
self.setup()
}
public func textFieldDidEndEditing(_ textField: UITextField) {
removeSuggestionView()
}
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
_ = self.resignFirstResponder()
return true
}
}
extension SuggestionTextField : UITableViewDelegate ,UITableViewDataSource {
public func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return defaultShow ? suggestionlist.count : filterSuggestionlist.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! suggestionCell
cell.textLabel?.text = defaultShow ? suggestionlist[indexPath.row] : filterSuggestionlist[indexPath.row]
cell.textLabel?.textColor = UIColor.black
cell.textLabel?.textAlignment = .center
cell.textLabel?.adjustsFontSizeToFitWidth = true
return cell
}
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.text = defaultShow ? suggestionlist[indexPath.row] : filterSuggestionlist[indexPath.row]
if !self.defaultShow {
self.defaultShow = !self.defaultShow
}
tableView.deselectRow(at: indexPath, animated: true)
}
}
谢谢 我想,您可以在textfield中设置resignFirstResponder(),或者在textfield中设置becomeFirstResponder(),以便在textfield其他位置轻松控制。我想,您可以在textfield中设置resignFirstResponder(),或者设置becomeFirstResponder()在textfield other中轻松控制。我认为,因为您所有的文本字段都有Observer可在键盘上显示和关闭,而在您调用setup()的每个Observer中,我都解决了这个问题。这是因为“UITextField”textChange Observer。我把它移到becomeFirstResponder()中,它被修复了。我想,因为你所有的文本字段都有一个观察者要在键盘上显示和删除,在你调用setup()的每个观察者中,我都解决了它。这是因为“UITextField”textChange Observer。我把它移到becomeFirstResponder()中,它被修复了。第二个问题有解决方案吗?第二个问题有解决方案吗?