当我涉及[tableView setEditing:YES animated:YES]
时,删除左侧每个单元格上的控件显示,我想要做的是在我点击删除控件时获取事件,并直接删除单元格但不显示删除按钮右。
我知道苹果的标准方法是在右侧显示删除按钮,当我点击它时,数据源的
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
参与,我不想这样做的原因是我的单元格是由scrollview定制的,水平滚动所以滚动显示删除按钮会使它变得一团糟,所以我不会实现
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
在我的数据源中。
有什么想法吗?
答案 0 :(得分:1)
你做的一种方法是,自定义单元格并按照自己的方式删除单元格,例如,
创建一个新的自定义单元格,将UITableviewCell
命名为类似CustomCellTableViewCell
的名称
在CustomCellTableViewCell.h
中定义委托方法,例如
#import <UIKit/UIKit.h>
@class CustomCellTableViewCell;
@protocol CellDelegate <NSObject>
- (void)deleteCell:(CustomCellTableViewCell *)cell;
@end
@interface CustomCellTableViewCell : UITableViewCell
+ (CustomCellTableViewCell *)createCell;
@property (weak, nonatomic) IBOutlet UIButton *deleteButton;
@property (weak, nonatomic) IBOutlet UILabel *descriptionLabel;
@property (weak,nonatomic) id<CellDelegate> cellDelegate;
- (IBAction)deleteAction:(id)sender;
- (void)showDeleteButton;
- (void)hideDeleteButton;
@end
并在CustomCellTableViewCell.xib
中添加一个按钮并设置标签连接到deleteButton
和descriptionLabel
CustomCellTableViewCell.m
并在控制器 #import "CustomCellTableViewCell.h"
@implementation CustomCellTableViewCell
- (void)awakeFromNib {
// Initialization code
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if(self)
{
self = [CustomCellTableViewCell createCell];
}
return self;
}
+ (CustomCellTableViewCell *)createCell
{
NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CustomCellTableViewCell" owner:nil options:nil];
if ([arrayOfViews count] < 1) {
return nil;
}
for (id item in arrayOfViews) {
if([item isKindOfClass:[UITableViewCell class]])
return item;
}
return nil;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (IBAction)deleteAction:(id)sender {
if([self.cellDelegate respondsToSelector:@selector(deleteCell:)])
{
[self.cellDelegate deleteCell:self];
}
}
- (void)showDeleteButton
{
CGRect destRect = self.descriptionLabel.frame;
destRect.origin.x += 80;
[UIView animateWithDuration:0.3 animations:^{
self.descriptionLabel.frame = destRect;
}];
}
- (void)hideDeleteButton
{
CGRect destRect = self.descriptionLabel.frame;
destRect.origin.x = 0;
[UIView animateWithDuration:0.3 animations:^{
self.descriptionLabel.frame = destRect;
}] ;
}
@end
文件中
.m
尝试新项目你会得到它
答案 1 :(得分:0)
你可以使用UIViewController
在tableview
tableviewcell
和UIViewController
我使用swift
实现同样的目标。它会告诉您如何在Objective-C
以下是代码:
var data:[String] = ["One","Three","Four","Five","Six"]
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = self.editButtonItem()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel.text = self.data[indexPath.row]
if editing
{
cell.imageView.image = UIImage(named: "Button-Delete-icon.png")
}
else
{
cell.imageView.image = UIImage(named: "")
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if editing
{
self.data.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
}
}
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.tableView.reloadData()
}
希望它会帮助