ios - 검색 - uisearchbar frame
UITableView-Swift에서 UISearchController를 구현하는 방법 (2)
누군가 나 같은 사람을 괴롭히는 사람이 있다면 ..이 코드가 도움이 될거야.
class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate,UISearchResultsUpdating {
@IBOutlet weak var tblView: UITableView!
var tabledata = ["lucques","chickendijon","godaddy","amazon","chris","ambata","bankofamerica","abelcine","AUTO + TRANSPORTATION","BILLS + UTILITIES","FOOD + DINING","HEALTH","AutoCare", "Auto Payment" , "Gas+Fuel","Electric Bill", "Internet/Television","Fast Foodd", "Gorceries" , "Restaurants","Gym Membership", "Health Insurance","auto","note-bullet","knife","heart"]
var filteredTableData = [String]()
var resultSearchController = UISearchController()
override func viewDidLoad() {
super.viewDidLoad()
tblView.delegate = self
tblView.dataSource = self
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.barStyle = UIBarStyle.Black
controller.searchBar.barTintColor = UIColor.whiteColor()
controller.searchBar.backgroundColor = UIColor.clearColor()
self.tblView.tableHeaderView = controller.searchBar
return controller
})()
self.tblView.reloadData()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.resultSearchController.active {
return self.filteredTableData.count
}else{
return self.tabledata.count
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var section = indexPath.section
var row = indexPath.row
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier:"addCategoryCell")
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.backgroundColor = UIColor.clearColor()
cell.contentView.backgroundColor = UIColor.clearColor()
cell.textLabel?.textAlignment = NSTextAlignment.Left
cell.textLabel?.textColor = UIColor.blackColor()
cell.textLabel?.font = UIFont.systemFontOfSize(14.0)
if self.resultSearchController.active {
cell.textLabel?.text = filteredTableData[indexPath.row]
} else {
cell.textLabel?.text = tabledata[indexPath.row]
}
return cell
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
filteredTableData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
self.tblView.reloadData()
}
}
나는 Swift의 초보자이며 UIViewController
클래스에있는 UITableView
검색 기능을 추가하려고합니다. 내가 많이 봤 거든 UISearchDisplayController
가 사용 중지되고 UISearchController로 대체 찾았습니다. 튜토리얼을 검색하려고 할 때, 특별히 UITableView
찾지 못했습니다. 그들 중 일부는 UITableViewController
에서 구현하기위한 것이 었습니다. 그래서 내 질문은 다음과 같습니다.
UIViewController
클래스에있는UITableView
에서UISearchController
를 구현할 수 있습니까? (나는 우리가 할 수 있다고 생각한다)가능한 경우 Objective-C로 작성된 이러한 코드 줄을 변환하십시오. 또는 실제로 유용한 자습서가 있다면 알려주십시오.
@property (strong, nonatomic) UISearchController *searchController; UITableViewController *searchResultsController = [[UITableViewController alloc] init]; // Init UISearchController with the search results controller self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; // Link the search controller self.searchController.searchResultsUpdater = self;
편집 : 검색 결과로 updater를 할당하려고합니다.
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blackColor()
self.addTableViewWithSection()
self.searchResultsController = UITableViewController()
var controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
}
}
* 그러나 라인 컨트롤러에서 .searchResultsUpdater = self 나는 " UISearchResultsUpdating ?"유형의 값에 "ViewController"값을 할당 할 수 없습니다. .. UIViewController 유형 클래스에서 UISearchController 를 사용할 수 있는지 정말 의심 스럽습니다.
예, 검색 방식이 근본적으로 바뀌 었습니다. 더 나은 시스템으로 생각합니다. 새로운 시스템은 가장 간단한 구현의 경우 훨씬 더 낫고 곧바로 중요합니다. 그것을 사용하는 것은 매우 간단합니다.
먼저 클래스가 UISearchResultsUpdating
프로토콜을 준수하도록합니다.
class MyTableViewController: UITableViewController, UISearchResultsUpdating {}
검색 컨트롤러 속성을 추가하십시오.
class MyTableViewController: UTableViewController, UISearchResultsUpdating {
let searchController = UISearchController(searchResultsController: nil)
}
viewDidLoad에 검색 창 추가 :
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = searchController.searchBar
}
마지막으로 UISearchResultsUpdating
프로토콜에서 제공되는 updateSearchResults:for
메서드를 구현합니다.
func updateSearchResults(for searchController: UISearchController) {
}
물론이 메소드의 구현은 데이터를 검색하는 위치에 따라 달라집니다. 입력 할 때 검색 내용으로 현재 테이블 뷰를 업데이트합니다. updateSearchResultsForSearchController
메소드에서 데이터 소스를 갱신하고 테이블 뷰를 다시로드하십시오. 다시 입력하면 업데이트되므로 검색 할 데이터가 크거나 인터넷에서 검색하는 경우이 메서드에 일부 동시성을 추가해야합니다.
다른 컨트롤러를 사용하여 검색 결과를 채우려는 경우 searchController
속성을 초기화 할 때 해당 VC를 전달할 수 있습니다.
편집 : 귀하의 질문을 다시 읽었습니다 및 뭔가 중요 한 것을 추가하는 것을 잊은 것 같습니다.
UITableViewController에는 tableView
라는 멤버가 있습니다. 컨트롤러의 테이블 뷰를 가져올 수 있지만 UITableView
를 채우려면 터치 할 필요가 없습니다. UITableView에서는 SearchController 로직을 직접 사용할 수 없습니다. 컨트롤러와 함께 작업해야합니다. UITableViewController 대리자 및 데이터 소스 메서드를 사용하여 검색 결과로 테이블 UI를 업데이트하십시오.
UITableViewController, UITableViewDelegate 및 UITableViewDataSource를 사용하여 읽으십시오. 그러면 검색 결과를 얻는 방법을 이해할 수 있습니다.