Ios 使用UITableViewCell委派
当我进入“编辑模式”时,我试图在我的Ios 使用UITableViewCell委派,ios,objective-c,uitableview,delegates,Ios,Objective C,Uitableview,Delegates,当我进入“编辑模式”时,我试图在我的TableViewCell中隐藏标签。所以我创建了一个协议: // UITableView Class @protocol CellDelegate <NSObject> - (void)toggleOpacityOff - (void)toggleOpacityOn @end //in @interface @property (nonatomic, strong) id <CellDelegate> delegate; 但当我运
TableViewCell
中隐藏标签。所以我创建了一个协议:
// UITableView Class
@protocol CellDelegate <NSObject>
- (void)toggleOpacityOff
- (void)toggleOpacityOn
@end
//in @interface
@property (nonatomic, strong) id <CellDelegate> delegate;
但当我运行此操作时,这些方法仅适用于TableView中最上面的单元格。这是为什么?我该如何修复它?非常感谢!:) 您应该能够通过更改以下行来解决此问题,以设置正确的代理(请记住,代理应始终是弱的,而不是强的!): 行:
cell.delegate = self;
更详细的解释是,委派并不是实现这一目标的正确方法。
代理意味着向您反馈一些特定的操作或信息,这样您的单元格实际上会告诉代理它已打开或关闭某些操作。这是没有意义的,因为您希望关闭某些功能
实现目标的正确方法是创建UITableViewCell
子类,并在单元格上实现这些方法(toggleOpacityOff
和toggleOpacityOn
)。或者更好地创建一个特定的单元格属性并覆盖它的setter。然后在UITableViewDelegate
方法tableView:didSelectRowAtIndexPath:
中调用此方法。请参见以下示例:
@interface MyCell : UITableViewCell
@property (nonatomic) BOOL opacity;
@end
@implementation MyCell
- (void)setOpacity:(BOOL)opacity
{
if (opacity)
{
// Set opacity to ON
...
}
else
{
// Set opacity to OFF
}
}
@end
要在所有单元格中循环,请执行以下操作:
- (void)updateCells
{
for (NSInteger i = 0; i < [self tableView:self.tableView numberOfRowsInSection:0]; i++)
{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
MyCell *cell = (MyCell *)[self tableView:self.tableView cellForRowAtIndexPath:indexPath];
cell.opacity = YES;
}
}
-(无效)更新单元格
{
对于(NSInteger i=0;i<[self tableView:self.tableView numberofrowsin节:0];i++)
{
NSIndexPath*indexPath=[NSIndexPath indexPathForRow:i第1节:0];
MyCell*cell=(MyCell*)[self-tableView:self.tableView-cellforrowatinexpath:indexPath];
cell.opacity=是;
}
}
除此之外,在模型中记住此状态可能是明智的,这样在重复使用单元格时(滚动时)它仍然是正确的。只需在tableview类中保留一些BOOL,如isInEditMode。然后在cellForRowAtIndexPath中添加类似的内容
if (isInEditMode)
[cell.myText setHidden:YES];
else
[cell.myText setHidden:NO];
一旦你想切换到编辑模式,你只需这样做
self.isInEditMode = YES;
[self.tableview reloadData]
如果我正确理解了您试图执行的操作,那么您的委托代码中有一个错误。我认为委托应该是
弱的
,而不是强的
。@Zhang没有解决问题。没有说它解决了问题,只是指出:Dbut我的cell类没有delegate属性,事实上,我确实需要它是self.delegate=cell
,因为我的协议在我的TableView类中。但问题是,我需要从UITableViewClass
中的其他地方调用它,我有一个按钮可以打开和关闭编辑模式,我需要从那里调用它是的,你可以。使用:tableView:cellforrowatinexpath:
方法获取单元格,并对特定单元格调用setOpacity
。如果需要更多,只需创建nsindepath
对象。如果需要将此应用于所有单元格,我需要创建什么类型的nsindepath对象CustomCell*cell=(CustomCell*)[self.tableView cellforrowatinexpath:(?)
如何对所有单元格执行此操作?
if (isInEditMode)
[cell.myText setHidden:YES];
else
[cell.myText setHidden:NO];
self.isInEditMode = YES;
[self.tableview reloadData]