我有一个具有
的UITableViewCell接受和删除按钮基本上都是删除单元格。接受更改某些数据的状态,它将显示在另一个屏幕上,删除将完全删除它。
这是我展示tableviewcell的方法
- (InvitationCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellIdentifier = @"Identifier";
InvitationCell *cell = (InvitationCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// Create a new PFObject Object
PFObject *connection = nil;
connection = [self.tableData objectAtIndex:[indexPath row]];
PFObject *inviterCodeName = connection[@"Inviter"];
[inviterCodeName fetch];
cell.inviterCodeName = inviterCodeName; // Allows us to use this in the cell
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setDateFormat:@"EEE, MMM, h:mm a"];
cell.dateLabel.text = [dateFormatter stringFromDate:[connection updatedAt]];
cell.codeName.text = [NSString stringWithFormat:@"Invitee Code Name: %@", inviterCodeName[@"codeName"]];
if (inviterCodeName[@"description"] == nil) {
cell.codeNameDescription.text = @"";
} else {
cell.codeNameDescription.text = [NSString stringWithFormat:@"%@", inviterCodeName[@"description"]];
}
return cell;
}
我不确定的是我是否将accept / reject方法放在实际的UITableViewCell类中,或者是否将它们保存在具有所有UITableView方法的类中?
如果我将它们保存在具有所有UITableView方法的类中,如何使用自定义单元格中的两个按钮?我可以给他们打电话吗?我需要使用另一种委托方法吗?
答案 0 :(得分:3)
关于你的第一个问题,我会说以下内容。不要不将逻辑放在UITableViewCell
内。单元格不是控制器而是视图。所以,它内部不应该有逻辑。控制器是正确的位置。
可以在UITableViewCell Is Not a Controller中找到关于它的好讨论。我真的建议你阅读它。
关于第二次讨论,您可以采取以下几种方式。例如,您可以直接在控制器中注册操作或使用委托模式。我更喜欢后者,因为它对我来说更清楚。但这是个人品味。例如,它允许在执行类似操作的另一个控制器中重用这些单元。
这是关于如何实现它的旧讨论。但它仍然有效。 Recipes to pass data from UITableViewCell to UITableViewController
希望它有所帮助。
答案 1 :(得分:2)
在您的InvitationCell.h文件中添加以下属性。
@property NSIndexPath *indexPath;
并将委托方法添加为。
-(void)deleteButtonClickedForIndexPath:(NSIndexPath *)indexPath;
-(void)acceptButtonClickedForIndexPath:(NSIndexPath *)indexPath;
在tableView控制器中, cellForRowAtIndexPath 方法添加以下代码行
cell.delegate=self;
cell.indexPath = indexPath;
将委托方法添加到控制器并根据indexPath值解决它们。