UICollectionViewCell 添加textField Cell消失不见问题

1 篇文章 0 订阅
1 篇文章 0 订阅

今天在做项目的时候,在 collectionView 的 cell 中添加了一个 textField,于是就出现了一个问题。


collectionView相关代码:

注册:

 [_collectionregisterClass:[CollectionViewCellclass]forCellWithReuseIdentifier:@"cell"];


-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return 10;

}


-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{

    return1;

}


-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{  

    CollectionViewCell *cell = [collectionViewdequeueReusableCellWithReuseIdentifier:@"cell"forIndexPath:indexPath];

    cell.backgroundColor = [UIColorcyanColor];

    return cell;

}


cell 中添加的 textField

-(UITextField *)field{

    if (!_field) {

        _field = [[UITextFieldalloc]initWithFrame:CGRectMake(50, 50,250,50)];

        _field.font =FONT(17);

        _field.text =@"";

        _field.textColor = [UIColorblackColor];

        _field.backgroundColor = [UIColorlightGrayColor];

    }

    return_field;

}


在没有点击 textField 的时候,滑动页面不存在任何问题。但是当给 textField 输入内容或者点击这个 textField 后滑动页面,然后再滑动回当前页面,这时候 cell 就会消失不见。


原本以为这是cell的重用问题,经过长时间的调试,才发现是textField的问题。如果 textField 获得焦点,然后滑动 cell 那么 cell,就会消失不见。


解决办法是只需要在 collectionView 事件所在的文件中添加如下代码即可:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    [self.viewendEditing:YES];

}



这里顺便也说一下另外一个问题的解决办法,就是关于 cell 重用的问题。

很多时候我们在 cell 里面添加一些内容,当我们滑动后很多东西都会重复显示。我也同样遇到了这个问题,在 textField 中添加数据(按页滑动),滑动之后前面添加的数据会自动重复显示到后面页面中的 textField 中。

解决办法就是把 textField 中的值通过代理保存到一个可变数组中,然后通过 cell 显示。


您可以使用 `FocusListener` 监听器来实现这个功能。当用户单击 `JTextField` 时,将焦点设置为该组件,然后清除其文本。当用户离开文本字段并且文本字段为空时,将文本重新设置为提示。 下面是一个示例代码片段,演示如何在 `JTextField` 中实现此行为: ```java import java.awt.Color; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.JTextField; public class HintTextField extends JTextField implements FocusListener { private final String hint; private boolean showingHint; public HintTextField(final String hint) { super(hint); this.hint = hint; this.showingHint = true; super.addFocusListener(this); } @Override public void focusGained(FocusEvent e) { if(this.getText().isEmpty()) { super.setText(""); showingHint = false; } } @Override public void focusLost(FocusEvent e) { if(this.getText().isEmpty()) { super.setText(hint); showingHint = true; } } @Override public String getText() { return showingHint ? "" : super.getText(); } } ``` 在这个实现中,我们创建了一个 `HintTextField` 类,它继承自 `JTextField` 并实现了 `FocusListener` 接口。当文本字段获得焦点时,如果文本字段中的文本与提示匹配,则将文本设置为空,并将 `showingHint` 标志设置为 `false`。当文本字段失去焦点时,如果没有输入文本,则将文本设置为提示,并将 `showingHint` 标志设置为 `true`。在这个实现中,我们还覆盖了 `getText()` 方法,以返回空字符串而不是提示文本,如果 `showingHint` 为 `true`。 这样,当用户单击 `JTextField` 时,提示文本将消失,直到用户输入文本或离开文本字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值