iOS 는 UISearchController 를 사용 하여 애니메이션 문 제 를 해결 합 니 다.
6402 단어 iOS
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
searchCurrentPage = 1
searchListArray = listArray
tableView.reloadData()
searchBar.setShowsCancelButton(true, animated: true);
let tempView = searchBar.subviews.first;
for subView: UIView in (tempView?.subviews)!{
if subView.isMember(of: NSClassFromString("UINavigationButton")!){
let cancelButton: UIButton = subView as! UIButton;
cancelButton.setTitle(" ", for: .normal);
break;
}
}
return true
}
두 번 째 단계:searchBarSearchButton Clicked 를 통 해 검색 을 클릭 하여 네트워크 요청 을 수행 합 니 다.
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if searchListArray.count > 0 {
searchListArray.removeAll()
}
// ,
self.tableView.reloadData()
}
세 번 째 단계:검색 BarCancelButton Clicked 를 통 해 검색 상태 취소
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchController.isActive = false
self.tableView.reloadData()
}
네 번 째 단계:검색 상자,팝 업,사라 질 때 애니메이션 이 동기 화 되 지 않 는 문 제 를 해결 합 니 다.
func willPresentSearchController(_ searchController: UISearchController) {
self.edgesForExtendedLayout = .bottom
}
func willDismissSearchController(_ searchController: UISearchController) {
self.edgesForExtendedLayout = .bottom
}
전체 의사 코드:
import UIKit
class OcssClientListVC: OcssBaseVC, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UISearchControllerDelegate {
private let clientListIdentifier = "OcssClientListCell"
private var tableView: UITableView!
private var listArray = [[String: Any]]()
private var currentPage = 1
private var pageSize = 30
private var isHidden = false
private var searchCurrentPage = 1
private var searchListArray = [[String: Any]]()
private var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = " "
let search = UISearchController(searchResultsController: nil)
search.dimsBackgroundDuringPresentation = false
self.searchController = search
search.searchBar.placeholder = " ID "
// search.searchResultsUpdater = self
search.searchBar.delegate = self
search.delegate = self
search.searchBar.sizeToFit()
tableView = UITableView.init(frame: view.bounds, style: .plain)
tableView.delegate = self
tableView.backgroundColor = UIConstants.ColorFromRGB(245, 245, 245)
tableView.dataSource = self
tableView.register(OcssClientListCell.self, forCellReuseIdentifier: clientListIdentifier)
tableView.separatorStyle = .none
view.addSubview(tableView)
tableView.tableFooterView = UIView()
tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: { [weak self] in
if let strongSelf = self {
strongSelf.getAgentList()
}
})
tableView.tableHeaderView = search.searchBar
self.definesPresentationContext = true
// self.searchVC.nav = self.navigationController;
// self.searchVC.searchBar = self.searchController.searchBar;
getAgentList()
moreButton.isHidden = false
moreButton.setTitle(" ", for: .normal)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.isTranslucent = false
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.navigationBar.isTranslucent = true
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.isActive {
return searchListArray.count
}
return listArray.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100.0 * UIConstants.NewScale_iPhone6
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:clientListIdentifier, for: indexPath) as! OcssClientListCell
cell.selectionStyle = .none
if searchController.isActive {
// cell
}else {
// cell
}
return cell
}
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
searchCurrentPage = 1
searchListArray = listArray
tableView.reloadData()
searchBar.setShowsCancelButton(true, animated: true);
let tempView = searchBar.subviews.first;
for subView: UIView in (tempView?.subviews)!{
if subView.isMember(of: NSClassFromString("UINavigationButton")!){
let cancelButton: UIButton = subView as! UIButton;
cancelButton.setTitle(" ", for: .normal);
break;
}
}
return true
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if searchListArray.count > 0 {
searchListArray.removeAll()
}
//
self.tableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
self.tableView.mj_footer.isHidden = isHidden
searchController.isActive = false
self.tableView.reloadData()
}
func willPresentSearchController(_ searchController: UISearchController) {
self.edgesForExtendedLayout = .bottom
}
func willDismissSearchController(_ searchController: UISearchController) {
self.edgesForExtendedLayout = .bottom
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.