【问题标题】:UITableViewCell, Delete Button Frame?UITableViewCell,删除按钮框架?
【发布时间】:2011-07-28 15:21:14
【问题描述】:

有没有办法改变UITableViewCells 上使用的“滑动”[DELETE] 按钮的框架?目前它在单元格内垂直居中,但如果可能的话,我想将其移至青色指南显示。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview


    【解决方案1】:

    如果您正在寻找一种非常正确的方法来解决此问题,那么您应该继承UITableViewCell 并覆盖所有状态处理方法以正确绘制您自己的删除按钮(不要在这些方法中调用 super)。但是还有另一种简单的方法:

    @implementation CustomCell
    - (void)layoutSubviews {
           [super layoutSubviews];
           if (self.showingDeleteConfirmation) {
                 if ([self.subviews count] < 4) return;
                 UIView *delBtn = [self.subviews objectAtIndex:3];
                 delBtn.frame = CGRectOffset(delBtn.frame, 0, 10);
           }
    }
    @end
    

    【讨论】:

    • [self.subviews objectAtIndex:3] 迟早会崩溃。覆盖状态处理和绘制自定义删除按钮是更好的主意。
    • 是的,如果我们使用数组,我们应该在每次通过索引访问项目之前检查它的边界。
    • 这真的解决了我的问题。但我有一个问题。当删除按钮出现时,它似乎正在从原始位置移动到我刚刚设置的新位置,这看起来很奇怪。我们怎样才能使删除按钮出现在我们为其设置原点的同一位置。
    • @Nitish,您需要通过继承 UITableViewCell 来实现自己的 Cell 类。您可以从 xib 配置它并手动显示或隐藏删除按钮。
    • 作为@FilipRadelic 的建议,这里是另一个例子:stackoverflow.com/a/19412487/1721946
    【解决方案2】:

    而不是didTransitionToState:

    使用-(void)willTransitionToState:并设置editingAccessoryView的框架怎么样?

    - (void)willTransitionToState:(UITableViewCellStateMask)state
    {
        if (state == UITableViewCellEditingStyleDelete) 
        {
    
            NSInteger num = 10;
    
            UIView.frame = CGRectMake(UIView.frame.origin.x,UIView.frame.origin.y - num,
            UIView.size.width,UIView.size.height);
        }
    }
    

    【讨论】:

      【解决方案3】:

      尝试更改附件视图的框架

      【讨论】:

      • 你能扩展一下吗?我希望在我的 UITableViewCell 子类中使用 didTransitionToState:,但我没有任何运气设置附件视图框架。
      猜你喜欢
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2021-05-17
      相关资源
      最近更新 更多