在集合视图中显示/隐藏顶行

时间:2017-11-06 21:13:10

标签: ios swift forms uicollectionview

我正在尝试使用集合视图构建登录/注册页面 我希望能够删除前4行并在用户选择登录段控件时收缩集合视图 我想重新添加这4行并相应地重新调整集合视图的大小。 我希望能够在添加删除这些行时维护用户在电子邮件文本字段中输入的文本。Main Screen

我尝试在索引路径中使用删除项目,但无法弄清楚如何在顶部重新输入它们 因此,我尝试使用.ishidden = true而不是删除,但重复更改段控制值会导致在文本字段内输入的文本放在不同的单元格中。例如,如果我在隐藏单元格的登录页面上,并在电子邮件文本字段中键入Hello,则单击“注册”,显示完整表单,“Hello”是“姓氏”文本字段中的文本,并且它始终显示在不同的文本字段中textfield如果我继续在登录和注册之间切换。

我面临的另一个问题是,当我尝试使登录屏幕看起来如下所示 Login Screen 通过更改collectionView高度约束常量,并为collectionView.contentInset.Top设置负值,它确实显示为我想要的,但是一旦我选择了Register,它就不会加载完整的表单,这是它看起来如何。 partial register

我的代码段控制更改代码如下:

@objc func handleLoginRegisterChange() {
        if LoginRegisterSegmentControl.selectedSegmentIndex == 0 {
            LoginRegisterButton.setTitle("Login", for: .normal)
            //collectionView.reloadData()
            collectionView.cellForItem(at: IndexPath(item: 0, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 1, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 2, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 3, section: 0))?.isHidden = true
            collectionView.contentInset.top = -160.6
            collectionViewHeight.constant = 80
        }
        else if LoginRegisterSegmentControl.selectedSegmentIndex == 1 {
            LoginRegisterButton.setTitle("Register", for: .normal)
            collectionView.cellForItem(at: IndexPath(item: 0, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 1, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 2, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 3, section: 0))?.isHidden = false
            collectionView.reloadData()
            collectionView.contentInset.top = 0
            collectionViewHeight.constant = 240
        }
    }

我的customCell只有一个Textfield

这就是我设置占位符的方式

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let customCell = collectionView.dequeueReusableCell(withReuseIdentifier: customeCellIdentifier, for: indexPath) as! CustomCell
    customCell.textField.placeholder = signUpPlaceHolders[indexPath.row]
    return customCell
}

并且signUpPlaceHolder数组是:

let signUpPlaceHolders = ["First Name", "Last Name", "Company Name", "Phone", "Email", "Password"]

我是Swift的初学者并试图找出合集视图,我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我建议检查Apple doc中的UICollectionView类,然后在你的分段控制操作中为你的例子,你可以在声明为var后更新你的数组:

@objc func handleLoginRegisterChange() {
    if LoginRegisterSegmentControl.selectedSegmentIndex == 0 {    
        signUpPlaceHolders = ["Email", "Password"]
        collectionViewHeight.constant = 80
    } else { 
        signUpPlaceHolders = ["First Name", "Last Name", "Company Name", "Phone", "Email", "Password"]
        collectionViewHeight.constant = 240
    }
    collectionView.reloadData()
}