单击指定单元格后,在搜索栏占位符中获取表格视图单元格文本值

Posted

技术标签:

【中文标题】单击指定单元格后,在搜索栏占位符中获取表格视图单元格文本值【英文标题】:Getting Table View Cell text Value in Searchbar Placeholder once a specified cell is clicked 【发布时间】:2017-12-29 12:38:49 【问题描述】:

我的 ViewController 包含一个 Table View。我正在从 JSON 获取数据,并且已经能够在我的 表格视图单元格 中显示这些值。还有搜索栏用于过滤目的。

我想在点击特定单元格时将我的表格视图单元格文本作为我的搜索栏占位符。 p>

我希望在单击特定单元格时将 Baramunda 作为我的占位符文本

我的代码如下。

func searchBar()

    let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50));
    searchBar.delegate = self
    searchBar.showsScopeBar = true
    searchBar.tintColor = UIColor.green
    self.view .addSubview(searchBar)

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 
    if searchText == ""
    
        tableView.alpha = 0.0
        searchBar.placeholder = "Search Location Here"
        parseData()
    
    else 

        if searchBar.selectedScopeButtonIndex  == 0 
            tableView.alpha = 1.0
            areaNameArr = areaNameArr.filter( (anyobject) -> Bool in
                return (anyobject.lowercased.contains(searchText.lowercased()))
            )

        
        else 
            print("Do Nothing")
        
    
    self.tableView.reloadData()



public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int



    return areaNameArr.count





public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell


     let cell = tableView.dequeueReusableCell(withIdentifier: "cell" )
    cell?.backgroundColor = UIColor .black
    cell?.textLabel?.textColor = UIColor .white
    cell?.textLabel?.text = areaNameArr[indexPath.row] as? String
    return cell!

【问题讨论】:

你为此做了什么?显示一些代码。 @srsstyle 您希望选定单元格的文本作为搜索栏的文本还是搜索栏的占位符?我希望你知道区别 有什么问题?你的问题似乎微不足道。 @Apogee 搜索栏的占位符而已。 @Umar 我想在点击特定单元格时在搜索栏的占位符值中获取单元格文本值。 【参考方案1】:

您需要将您的 searchBar 变量声明为全局变量,以便在您的函数 searchBar() 之外访问。

class ViewController: UIViewController
let searchBar = UISearchBar()
 override func viewDidLoad() 
 super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
   //here goes your code of viewDidLoad

//This is your function for creating search bar ,only first line is changed and rest is same
func searchBar()
searchBar.frame(forAlignmentRect: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))
searchBar.delegate = self
searchBar.showsScopeBar = true
searchBar.tintColor = UIColor.green
self.view .addSubview(searchBar)


// this delegate method is called when cell is tapped
// remember to connect delegate from storyboard or you can use self.tableView.delegate = self
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    //here get the text from tapped cell index
    let tappedCellText = areaNameArr[indexPath.row] as? String
    // here set placeholder
    searchBar.placeholder = tappedCellText
    // when cell is clicked you need to set text of search bar to nil or blank otherwise you would not be able to see placeholder text because some text is already there in search bar
     searchBar.text = ""
    // if you don't cleanup text from search bar you will be required to delete text from search bar manually to see placeholder text

如果这对您没有帮助,请告诉我

【讨论】:

我现在收到此错误 'searchBar()' 的重新声明无效。在这一行 func searchBar() . 已解决@Vikky 谢谢。【参考方案2】:

我现在没有 xcode,但应该可以使用。

在 tableView 的 didSelectCell 委托方法中添加以下代码

var searchTextField: UITextField? = searchBar.value(forKey: "searchField") as? UITextField
if searchTextField!.responds(to: #selector(getter: UITextField.attributedPlaceholder)) 
    let attributeDict = [NSAttributedStringKey.foregroundColor: UIColor.white]
    searchTextField!.attributedPlaceholder = NSAttributedString(string: "Search", attributes: attributeDict)

【讨论】:

能否请您提供该方法定义(didSelectCell)。

以上是关于单击指定单元格后,在搜索栏占位符中获取表格视图单元格文本值的主要内容,如果未能解决你的问题,请参考以下文章

单击表格单元格后,QtableView 中的某些单元格不会自动重绘

excel合并单元格后怎么边框线没了?

如何从表格视图单元格中的图像手势获取 indexPath

部分滑动单元格后,表格视图单元格高度缩小

重新排序单元格后如何更改获取结果控制器数组中对象的顺序

重新排列表格视图单元格后如何更新核心数据记录