Редактировать ячейки CollectionView в UICollectionView - PullRequest
0 голосов
/ 14 июля 2020

Я создаю приложение программно (с первой попытки). Мне удалось создать представление коллекции, и при нажатии кнопки добавления на панели навигации появляется новая ячейка. Я хочу иметь возможность сделать все созданные ячейки доступными для редактирования (другими словами, показывать кнопку удаления на ячейках) при нажатии кнопки редактирования на панели навигации. В настоящее время, независимо от того, что я пробую, нажимаю я на редактирование или нет, ничего не происходит. Я попытался скрыть UIImage кнопки, а также кнопки, вызвав функцию, созданную в классе ячейки, при нажатии кнопки редактирования, а также попытался переместить эту функцию в класс ViewController, приложение запускается, но код не делает то, что это должно быть.

Мой код:

class CollectionViewController: UICollectionViewController, UITextViewDelegate {
    
    
    // decelrations of variables for use
    let cell = ListCell()
    let cellId = "cellId"
    var numberOfLists = 0
    var lists = [String]()
    let secondVC = TableViewController()


    
    // for learning purposes: codes sets up the view programitcally along with what is in scenedelagate
    override func viewDidLoad() {
        super.viewDidLoad()
        setCollectionView()
    
    }
    
    
    //Function that will generate the collectionView
    func setCollectionView() {
        
        collectionView.register(ListCell.self, forCellWithReuseIdentifier: cellId)
        collectionView.backgroundColor = .white
        navigationItem.title = "Lists"
        navigationController?.navigationBar.barTintColor = UIColor(white: 200/255, alpha: 1)
        navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont.boldSystemFont(ofSize: 20)]
       navigationItem.leftBarButtonItem = editButtonItem
        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
        
        collectionView.delegate = self //runs the delegate flow methods
        collectionView.dataSource  = self
        
       
             
    }
    
    // to do with enabling editing in CV - function tied to edit button
    override func setEditing(_ editing: Bool, animated: Bool){

        super.setEditing(editing, animated: animated)
        
        if editing {
            print ("Editing Mode Enabled")
            //cell.showButton()
        } else {
            print ("Editing Mode Closed")
        }
        
        // reloads the view after code is performed
        self.collectionView.reloadData()
    
        
     }
    
    
    // func when buttons are tapped to add a collection view
    @objc func addTapped() {
        
        print("This button should not crash")
        numberOfLists += 1
        navigationController?.pushViewController(secondVC, animated: true)
        collectionView.reloadData()
        
    }
 
    
    
}


// the following block of code has to do with the set up of the collectionView
extension CollectionViewController: UICollectionViewDelegateFlowLayout {

    // this code should speficiy how many cells you are going to have in your collectionview
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        
        return numberOfLists
        
    }
    
    // this code lets you reuse a cell
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)-> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! ListCell
        
         cell.deleteButton.setImage(UIImage.init(named: "delete"), for: .normal)
        
        return cell
        
    }
    
    // this code sets the sizing of the cells
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        return CGSize(width: (view.frame.width / 2) - 16, height: 100)
        
    }
    
    
    // where to place the cell on the screen
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        
        return UIEdgeInsets(top: 8, left: 9, bottom: 8, right: 8)
        
    }
    
    // this function just checks to see if the cell is selected
    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        
        navigationController?.pushViewController(secondVC, animated: true)

        
    }
    
}


//this class sets up the collectionViewCell
class ListCell: UICollectionViewCell {
   
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupCell()

    }
    
    
    fileprivate func setupCell(){
        
        let colors = cellRandomBackgroundColors()
        self.backgroundColor = colors[0]
        self.addSubview(listNameLabel)
        roundCorner()
        setCellShadow()
        
        self.addSubview(deleteButton)
        deleteButton.addTarget(self, action: #selector(deleteCell), for: .touchUpInside)
    
        


    }
    

    @objc func deleteCell() {
        
        print ("this button works")
        
        
    }
    
    func showButton() {
        
        
        deleteButton.isHidden = true
        print ("this is supposed to work")
        
        
        
        
    }

    
    func roundCorner() {
        self.contentView.layer.cornerRadius = 50.0
            self.contentView.layer.masksToBounds = true
            self.contentView.layer.borderWidth = 1.0
            self.contentView.layer.borderColor = UIColor.clear.cgColor
    }
    
    func setCellShadow() {
         self.layer.shadowColor = UIColor.black.cgColor
         self.layer.shadowOffset = CGSize(width: 0, height: 1)
         self.layer.shadowOpacity = 0.2
         self.layer.shadowRadius = 1.0
         self.layer.masksToBounds = false
         self.layer.cornerRadius = 3
         self.clipsToBounds = false
     }
    
    func cellRandomBackgroundColors() -> [UIColor] {
        //Colors
        let red = [#colorLiteral(red: 0.9654200673, green: 0.1590853035, blue: 0.2688751221, alpha: 1),#colorLiteral(red: 0.7559037805, green: 0.1139892414, blue: 0.1577021778, alpha: 1)]
        let orangeRed = [#colorLiteral(red: 0.9338900447, green: 0.4315618277, blue: 0.2564975619, alpha: 1),#colorLiteral(red: 0.8518816233, green: 0.1738803983, blue: 0.01849062555, alpha: 1)]
        let orange = [#colorLiteral(red: 0.9953531623, green: 0.54947716, blue: 0.1281470656, alpha: 1),#colorLiteral(red: 0.9409626126, green: 0.7209432721, blue: 0.1315650344, alpha: 1)]
        let yellow = [#colorLiteral(red: 0.9409626126, green: 0.7209432721, blue: 0.1315650344, alpha: 1),#colorLiteral(red: 0.8931249976, green: 0.5340107679, blue: 0.08877573162, alpha: 1)]
        let green = [#colorLiteral(red: 0.3796315193, green: 0.7958304286, blue: 0.2592983842, alpha: 1),#colorLiteral(red: 0.2060100436, green: 0.6006633639, blue: 0.09944178909, alpha: 1)]
        let greenBlue = [#colorLiteral(red: 0.2761503458, green: 0.824685812, blue: 0.7065336704, alpha: 1),#colorLiteral(red: 0, green: 0.6422213912, blue: 0.568986237, alpha: 1)]
        let kindaBlue = [#colorLiteral(red: 0.2494148612, green: 0.8105323911, blue: 0.8425348401, alpha: 1),#colorLiteral(red: 0, green: 0.6073564887, blue: 0.7661359906, alpha: 1)]
        let skyBlue = [#colorLiteral(red: 0.3045541644, green: 0.6749247313, blue: 0.9517192245, alpha: 1),#colorLiteral(red: 0.008423916064, green: 0.4699558616, blue: 0.882807076, alpha: 1)]
        let blue = [#colorLiteral(red: 0.1774400771, green: 0.466574192, blue: 0.8732826114, alpha: 1),#colorLiteral(red: 0.00491155684, green: 0.287129879, blue: 0.7411141396, alpha: 1)]
        let bluePurple = [#colorLiteral(red: 0.4613699913, green: 0.3118675947, blue: 0.8906354308, alpha: 1),#colorLiteral(red: 0.3018293083, green: 0.1458326578, blue: 0.7334778905, alpha: 1)]
        let purple = [#colorLiteral(red: 0.7080290914, green: 0.3073516488, blue: 0.8653779626, alpha: 1),#colorLiteral(red: 0.5031493902, green: 0.1100070402, blue: 0.6790940762, alpha: 1)]
        let pink = [#colorLiteral(red: 0.9495453238, green: 0.4185881019, blue: 0.6859942079, alpha: 1),#colorLiteral(red: 0.8123683333, green: 0.1657164991, blue: 0.5003474355, alpha: 1)]
        
        let colorsTable: [Int: [UIColor]] = [0: red, 1: orangeRed, 2: orange, 3: yellow, 4: green, 5: greenBlue, 6: kindaBlue, 7: skyBlue, 8: blue, 9: bluePurple, 10: bluePurple, 11: purple, 12: pink]
        
        let randomColors = colorsTable.values.randomElement()
        
        return randomColors!
    }
    
    
    
  
    let deleteButton: UIButton = {
        let deleteButton = UIButton(frame: CGRect(x:2,y:2,width:70,height:30))
        return deleteButton
    }()

    let listNameLabel: UILabel = {
        let listLabel = UILabel(frame: CGRect(x:2,y:50,width:70,height:30))
        listLabel.text = "Data entry on Second View"
        listLabel.font = UIFont.boldSystemFont(ofSize: 12)
        listLabel.backgroundColor = .green
        listLabel.translatesAutoresizingMaskIntoConstraints = false
        listLabel.tag = 1
        return listLabel
    }()
    
    
    let iconImageView: UIImageView = {
         let imageView = UIImageView()
         imageView.image = UIImage(named: "Folder")
         imageView.contentMode = .scaleAspectFit
         return imageView
     }()
 

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

Кнопка редактирования на ячейках, которая не исчезает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...