
[英]Correct way to setup a custom cell in the cellForRowAtIndexPath method?
[英]cellForRowAtIndexPath method custom button show 2 time
我在cellForRowAtIndexPath
方法中使用了此代码。 当我单击按钮或滚动表时,此按钮显示两次。 为什么此按钮显示2次,请帮帮我?
UIButton *trashbtn=[[UIButton alloc]initWithFrame:CGRectMake(cell.frame.size.width-20, cell.frame.size.height-30, 20, 20)];
[trashbtn setImage:[UIImage imageNamed:@"editor_trash"] forState:UIControlStateNormal];
[trashbtn addTarget:self action:@selector(DeleteMyAssociate:) forControlEvents:UIControlEventTouchUpInside];
[trashbtn setTag:indexPath.row];
[cell addSubview:trashbtn];
您首先应该在IB中的表内添加UITableViewCell。 然后为该单元格指定一个标识符,例如“ MyCellIdentifier”。 仍然在IB上,将出口添加到该单元格,例如按钮,textFields...。您可以最初将按钮设置为不可见。 然后在cellForRowAtIndexPath方法中,执行以下操作:
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCellIdentifier"];
if(cell){
myButton.hidden = NO; //
myTextField.text = @"BlaBlaBla";
}
}
嘿,我可以建议您使用自动布局和情节提要添加按钮,而不是通过编程方式添加按钮。
那是更好,更清洁的方法。
您面临的问题是单元格在表视图中被重用,因此,第一次创建按钮并将其添加到单元格时,它会出现一次。 但是,如果它已出队,则它已经具有按钮,因此当您添加另一个按钮时,最终会有多个按钮。
有两种方法可以纠正此问题。
首先,删除单元格的prepareForReuse
方法中的按钮,该方法在单元格被重用后立即调用。
其次,避免在cellForTableView...
方法中创建自定义视图。 使用已经具有按钮的自定义单元格。 现在,您可能会问,如果以这种方式执行按钮操作,该如何挂钩呢? 您可以为您的单元格提供一个委托方法,以调用您的视图控制器,或者可以为您的单元格传递一个块,以在单击按钮时执行。
据我所知,您已经有一个自定义单元格。向现有单元格添加一个按钮,并在customCell.h文件中为该单元格创建一个IbOutlet,然后在cellForRowAtIndexPath方法中使用其IBOutlet访问该按钮
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
customCell *cell =(customCell*) [tableView dequeueReusableCellWithIdentifier:@"customCell" forIndexPath:indexPath];
[cell.btn setTitle:@"blabla" forState:UIControlStateNormal];
[cell.btn setTag:indexPath.row];
[cell.btn addTarget:self action:@selector(method:) forControlEvents:UIControlEventTouchUpInside];
if(condition)
{
cell.btn.hidden=YES;
}
else
{
cell.btn.hidden = NO;
}
return cell;
}
不要忘记在ViewController类中注册customCell类。
您可以根据需要隐藏或取消隐藏按钮,也可以在每个类中向按钮添加不同的操作。 快乐编码..!
如果我的代码对您有帮助,请投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.