Swift:通过编程进行编码时,搜索栏未显示在viewController上

问题描述

我试图将搜索栏(带有IBAction方法)添加到我的viewController中,但是没有显示出来。我想念什么吗?

import UIKit

class SongrequestViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate {



var tableView = UITableView()
var searchBar = UISearchBar()

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    tableView = UITableView(frame: CGRect(x: 10,y: 200,width: 370,height:400))
    tableView.register(UITableViewCell.self,forCellReuseIdentifier: "cell")
    tableView.dataSource = self
    tableView.delegate = self
    self.view.addSubview(tableView)
    
    searchBar = UISearchBar(frame: CGRect(x: 0,y: 0,width: self.view.frame.size.width,height: 50))
    searchBar.searchBarStyle = UISearchBar.Style.prominent
    searchBar.placeholder = "Search for your song here..."
    searchBar.sizeToFit()
    searchBar.isTranslucent = false
    searchBar.delegate = self
    self.view.addSubview(searchBar)
}

tableView正在显示,但搜索栏却没有。

解决方法

不会在viewDidLoad中设置视图的框架。因此,self.view.frame.size.width可能不会在viewDidLoad中返回正确的值。

searchBar = UISearchBar(frame: CGRect(x: 0,y: 0,width: self.view.frame.size.width,height: 50))

尝试在viewDidAppear中添加搜索栏。

要检测搜索栏中的文本更改,请在UISearchBarDelegate中确认SongrequestViewController并实现其委托方法。

func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
    print("search text: ",searchText)
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...