我正在嘗試制作一個應用程式,該應用程式將根據是否按下左按鈕或右按鈕顯示帶有“右”或“左”名稱的設備的彈出視窗。但是,在我按向左或向右按??鈕后,彈出視窗顯示為空的 CollectionView。我將它涂成綠色以確保它的大小不是 {0, 0} 也不是。
彈出螢屏
此外,我試圖確保單元格不大于 CollectionView,但似乎并非如此。不過,我不能對它們進行大小限制,所以也許它們會被調整大小或其他什么。
故事板
我嘗試理解和使用該問題的解決方案,但似乎我的情況有些不同。在這個問題中,cellForItemMethod 被呼叫,但在我的情況下它不是,而且我沒有 UICollectionView 的子類,我想這就是為什么我不能覆寫 internalContentSize。
這是 PopUpViewController 的代碼:
import UIKit
protocol PopUpDelegate {
func connect(device: CollectionCell)
}
class PopUpController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
static let identifier: String = "PopUpController"
var parentVC: ViewController?
var left: Bool?
let reuseIdentifier = "cell"
var delegate: PopUpDelegate?
var lastSelectedCell: CollectionCell? = nil
@IBOutlet weak var collectionView: UICollectionView!
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("number of items in section called")
if (left!) {
return (parentVC!.leftDevices.count)
} else {
return (parentVC!.rightDevices.count)
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("cell for item called")
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CollectionCell
print("left: ", left!)
if (left!) {
cell.displayDevice(device: parentVC!.leftDevices[indexPath.row])
} else {
cell.displayDevice(device: parentVC!.rightDevices[indexPath.row])
}
cell.backgroundColor = UIColor.white
cell.selectButton.setTitleColor(UIColor.black, for: UIControl.State.normal)
cell.selectButton.setImage(UIImage(named: "unselectedButton"), for: UIControl.State.normal)
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("You selected cell #\(indexPath.item)!")
let cell = collectionView.cellForItem(at: indexPath) as! CollectionCell
cell.setSelected()
lastSelectedCell?.setUnselected()
lastSelectedCell = cell
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("parent has ", parentVC?.rightDevices.count, " items")
collectionView.reloadData()
}
static func showPopup(parentVC: UIViewController, left: Bool){
//creating a reference for the dialogView controller
if let popupViewController = UIStoryboard(name: "PopUp", bundle: nil).instantiateViewController(withIdentifier: "PopUpController") as? PopUpController {
popupViewController.modalPresentationStyle = .custom
popupViewController.modalTransitionStyle = .crossDissolve
//setting the delegate of the dialog box to the parent viewController
popupViewController.delegate = parentVC as? PopUpDelegate
popupViewController.left = left
parentVC = parentVC as? ViewController
print("showing left popup: ", left)
//presenting the pop up viewController from the parent viewController
parentVC.present(popupViewController, animated: true)
}
}
@IBAction func onConnectPressed(_ sender: Any) {
self.delegate?.connect(device: lastSelectedCell!)
self.dismiss(animated: true, completion: nil)
}
@IBAction func onDismissPressed(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
}
uj5u.com熱心網友回復:
再次檢查在 ViewController 到 PopUpController 螢屏之間傳遞的 leftDevices 和 rightDevices 資料,并符合委托和資料源。
collectionView.delegate = self
collectionView.dataSource = self
uj5u.com熱心網友回復:
里面viewDidLoad添加
collectionView.delegate = self
collectionView.dataSource = self
并洗掉
collectionView.reloadData()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398783.html
