制作一个弹出的ViewController了UICollectionViewController的

问题描述 投票:1回答:1

我有一个UITableViewController工作,并单击单元格时,我想有一个UICollectionViewController被弹出。

我已经成功地从一个UITableViewController呈现UICollectionViewController。然而,我无法弄清楚如何呈现它像一个弹出只考虑屏幕的部分。目前,它感觉整个视图。

我搜索了计算器,但无法找到一个可行的解决方案。

的UITableViewController

class SearchViewController: UITableViewController, UISearchBarDelegate {


let cellId = "cellId"
var filteredArray = [String]()
let books = Model().books

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.white
    navigationItem.titleView = navSearchBar
    setupView()
}

// Views.
let navSearchBar = NavSearchBar()
func setupView() {
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
    tableView.delegate = self
    tableView.dataSource = self
    navSearchBar.delegate = self
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { // Cancel button is touched.
    self.dismiss(animated: true, completion: nil)
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return books.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        book = books[indexPath.row]
    }
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
    cell.textLabel?.text = book
    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
    let cellLabelContent = cell!.textLabel!.text // Gets cell name.
    let cellLabelIndex = bibleBooks.firstIndex(of: cellLabelContent!) // searches books array to get correct index of cell name.
    print("Book name:", cellLabelContent!+",", "index:", cellLabelIndex!)
    let notificName = Notification.Name(rawValue: searchedBookIndex)
    NotificationCenter.default.post(name: notificName, object: cellLabelIndex)
    dismiss(animated: true, completion: nil)
    **HERE is where i present the collectionView**
    let layout = UICollectionViewFlowLayout()
    var topVC = UIApplication.shared.keyWindow?.rootViewController
    while((topVC!.presentedViewController) != nil) {
        topVC = topVC!.presentedViewController
        let navController = UINavigationController(rootViewController: ChapterNumbersCollectionView(collectionViewLayout: layout))
        topVC?.present(navController, animated: true, completion: nil)

    }      
}

UICollectionViewController

class ChapterNumbersCollectionView: UICollectionViewController {

let reuseIdentifier = "CellId"

override func viewDidLoad() {
    super.viewDidLoad()
    setupCollectionView()
    setupNavigationItem()
}

private func setupCollectionView() {
    collectionView.backgroundColor = .yellow
    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
}

private func setupNavigationItem() {
    let button = UIButton(type: .system)
    button.setTitle("cancel", for: [])
    button.addTarget(self, action: #selector(handleDismiss), for: .touchUpInside)
    button.frame = CGRect(x: 0, y: 0, width: 34, height: 34)
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
}

@objc func handleDismiss() {
    dismiss(animated: true, completion: nil)
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 200
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
    cell.backgroundColor = .red
    return cell
}
ios swift cocoa-touch uicollectionview
1个回答
0
投票

一种方法是使用view controller containment.你会在didSelectRow实例ChapterNumbersCollectionView,但不是呈现,其添加为子视图控制器。

然后,将具有加入其视图作为一个子视图,它动画使用animateWithDuration.

© www.soinside.com 2019 - 2024. All rights reserved.