2010-05-21 53 views
1

我有一个UITableViewDataSource,用于两个不同的UITableViews。在其中一个表格视图中,我想启用滑动删除功能,所以我实现了tableView:commitEditingStyle:forRowAtIndexPath,并且按预期工作。但是,在另一个表中,我想禁用该功能。允许在UITableViewDataSource的一个实例中刷卡删除,但不是另一个

我已经通过创建两个UITableViewDataSource类,一个子类化另一个,并且我只在子类中实现了tableView:commitEditingStyle:forRowAtIndexPath。我称它们为RecipientModel和RecipientModelEditable。

我想知道是否有更好的方法。

回答

4

我想你的意思是这样的:

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (self.isEditable) { 
     return UITableViewCellEditingStyleDelete; 
    } 
    return UITableViewCellEditingStyleNone; 
} 

,然后在commitEditingStyle,如果它的不可编辑

2

您可以创建两个相同类的实例RecipientModel。设置一个BOOL实例变量,可能名称为isEditable。您的界面可能是这样的:

@interface RecipientModel : NSObject <UITableViewDataSource> { 
    BOOL isEditable; 
} 

@property (readwrite) BOOL isEditable; 

@end 

以及实现可能是这样的:

@implementation RecipientModel 

@synthesize isEditable; 

- (void)tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
    forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (self.isEditable) { 
     // Allow swipe. 
    } else { 
     // Disallow swipe. 
    } 
} 

@end 

有一点要注意的是,大多数iPhone应用程序使用UITableViewController来实现自己的表视图的数据源和委托方法。这种方法对您的应用程序也可能更有意义。

+0

是的,但我怎么“禁止刷卡”,在没有做任何事情了'的tableView:commitEditingStyle:forRowAtIndexPath'?通过简单的定义方法,用户可以轻扫*查看*删除按钮。我不希望它显示出来。 – synic 2010-05-21 17:01:24

+0

你想让单元格可编辑吗?如果没有,那么你可以通过在'-tableView:canEditRowAtIndexPath:'中返回'NO'来解决这个问题。否则,如果仅仅定义该方法就足够了,那么就必须求助于你的子类化方法或者开始搞乱Objective-C运行时。 – 2010-05-21 17:50:42

+0

另请参阅:http://stackoverflow.com/questions/969313/uitableview-disable-swipe-to-delete-but-still-have-delete-in-edit-mode – 2010-05-21 17:52:44

相关问题