自定义UITableViewCell editAccessoryView?

时间:2013-01-18 03:05:35

标签: iphone ios xcode ios4

这就是困境:我想创建一个自定义editingAccessoryView,其中包含我的股票UITableViewCell的两个按钮。我想用故事板来实现这个目标。到目前为止,我已按照hereherehere列出的步骤进行了操作。我似乎无法让它工作。我得到的最接近的是当我创建类型为UIView的xib时,将类设置为包含UIViewController的{​​{1}}的类并将其绑定到我的UITableView,但是在IBOutletcellForRowAtIndexPath

事实是,我想我只需要知道如何创建视图然后将其映射到nil;从那里我相信我可以弄清楚如何添加按钮并映射相应的editAccessoryView。任何人都可以提供一些分步说明或教程链接吗?

2 个答案:

答案 0 :(得分:3)

我自己用以下代码解决了这个问题:

    UIView *editingCategoryAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 120, 35)];

    UIButton *addCategoryButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [addCategoryButton setTitle:@"Add" forState:UIControlStateNormal];
    [addCategoryButton setFrame:CGRectMake(0, 0, 50, 35)];
    [addCategoryButton addTarget:self action:@selector(addCategoryClicked:withEvent:) forControlEvents:UIControlEventTouchUpInside];

    UIButton *removeCategoryButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [removeCategoryButton setTitle:@"Remove" forState:UIControlStateNormal];
    [removeCategoryButton setFrame:CGRectMake(55, 0, 65, 35)];
    [removeCategoryButton addTarget:self action:@selector(removeCategoryClicked:withEvent:) forControlEvents:UIControlEventTouchUpInside];

    [editingCategoryAccessoryView addSubview:addCategoryButton];
    [editingCategoryAccessoryView addSubview:removeCategoryButton];
    cell.editingAccessoryView = editingCategoryAccessoryView;

如您所见,我以编程方式创建了一个新的UIView,并通过addSubview添加了两个按钮,然后将其分配给editingAccessoryView

答案 1 :(得分:3)

我知道这可能为时已晚,无法提供帮助,但它比您找到的解决方案要好得多。 iOS为您提供了一个名为tableView: editActionsForRowAtIndexPath indexPath:的方法。此方法基本上允许您添加自己的UITableViewRowActions,这比使用UIButtons添加整个UIView更容易(也更干净)。

Apple说:

  

如果要为其中一个表行提供自定义操作,请使用此方法。当用户在一行中水平滑动时,表格视图会将行内容移到一边以显示您的操作。点击其中一个操作按钮会执行与操作对象一起存储的处理程序块。

     

如果您没有实现此方法,表格视图会在用户滑动行时显示标准附件按钮。

如果需要,您可以自己查看Apple Documentation

示例(Swift)

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
    let customAction = UITableViewRowAction(style: .Normal, title: "Your Custom Action", handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) in
        println("Do whatever it is you want to do when they press your custom action button")
    })
    editAction.backgroundColor = UIColor.greenColor()

    let deleteAction = UITableViewRowAction(style: .Normal, title: "Delete", handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) in
        println("You can even implement a deletion action here")
    })
    deleteAction.backgroundColor = UIColor.redColor()

    return [deleteAction, editAction]
}