UITableViewCell自定义编辑内容

时间:2014-10-10 12:30:48

标签: ios uitableview

我希望我的单元格在编辑时不仅有删除按钮,还有其他按钮。那么实际的方法是什么?我已经尝试为UIView属性创建自己的editingAccessoryView对象,但问题是该视图仅出现在直接编辑中(即单击导航栏中的“编辑”按钮)并完全忽略单元格中的滑动。另外tableView:editActionsForRowAtIndexPath:方法尝试但是没有用,至少我没有设法弄清楚如何通过它的功能获得我想要的东西。提前谢谢!

4 个答案:

答案 0 :(得分:4)

您尝试此代码

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
    {
        NSLog(@"Action to perform with Button 1");
    }];
    button.backgroundColor = [UIColor greenColor]; //arbitrary color
    UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                    {
                                        NSLog(@"Action to perform with Button2!");
                                    }];
    button2.backgroundColor = [UIColor blueColor]; //arbitrary color

    return @[button, button2]; //array with all the buttons you want. 1,2,3, etc...
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:

}
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES; //tableview must be editable or nothing will work...
    }

答案 1 :(得分:1)

您也可以尝试此代码

.H File
{
    NSMutableArray *dataArray;

}


@property (weak, nonatomic) IBOutlet UITableView *atableView;

@property(nonatomic,strong)  NSMutableArray *dataArray;

**`.M file`**


- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataArray = [[NSMutableArray alloc] initWithObjects:@"Saurabh Sharma",@"Deepesh Jain",@"Ashish Sharma",@"Chandan",@"kanhaiya",@"Suchitra Bohra",@"Neha",@"Ghanshyam",nil];
    self.title = @"Move Rows";


    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style: UIBarButtonItemStyleBordered target:self action:@selector(editButton:)];

    [self.navigationItem setRightBarButtonItem:editButton];



    // Do any additional setup after loading the view from its nib.
}
    -(void)editButton:(UIBarButtonItem *)button
    {
        {
            if(self.editing)
            {
                [super setEditing:NO animated:NO];
                [atableView setEditing:NO animated:NO];
                [atableView reloadData];
                [self.navigationItem.rightBarButtonItem setTitle:@"Edit"];
                [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
            }
            else
            {
                [super setEditing:YES animated:YES];
                [atableView setEditing:YES animated:YES];
                [atableView reloadData];
                [self.navigationItem.rightBarButtonItem setTitle:@"Done"];
                [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];

    }

        }

    }

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;

    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [dataArray count];
    }

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        static NSString *cellIdentifair=@"cellIdentifair";
        UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifair];

        if(cell==nil)
        {
            cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifair];
        }


         cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        return cell;

    }

    #pragma delete row in table view
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
        return 10; // This is the minimum inter item spacing, can be more
    }
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return UITableViewCellEditingStyleDelete;
    }

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return TRUE;
    }

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [tableView beginUpdates];
        [dataArray removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
        [tableView endUpdates];
        NSLog(@"Methods called when row is deleted");
    }

    #pragma Move Table View Delegte


    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
    {
        NSString *item = [self.dataArray objectAtIndex:fromIndexPath.row];
        [self.dataArray removeObject:item];
        [self.dataArray insertObject:item atIndex:toIndexPath.row];
    }

答案 2 :(得分:1)

也适用于Swift。

    func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
        var completionButton = UITableViewRowAction(style: .Normal,
                                                    title: "Complete",
                                                    handler: {(action, index) in
                                                      /* Completion Code */
                                                      println("Complete")})
        completionButton.backgroundColor = .lightGrayColor()
        return [completionButton]
    }

答案 3 :(得分:0)

对于iOS 11,您应该使用

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath - 右键滑动

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath - 左侧滑动

例如:

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {

    UIContextualAction* action = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"Title" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
        // Do something
        completionHandler(YES);
    }

    UISwipeActionsConfiguration * actionsConfiguration = [UISwipeActionsConfiguration configurationWithActions:@[action]];
    return actionsConfiguration;
}