我正在开发一款iPhone应用程序,我遇到了一个问题。我有一个带有一些可编辑行的UITableView(
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ )
和一个不可编辑的行。如果我单击编辑,可编辑行会向右滑动一点,左侧会有一个红色圆形按钮,但不可编辑的行根本不会滑动。有没有办法将它滑到右边但没有左边的红色按钮?目前看起来并不好看。我希望有人可以帮助我:)
答案 0 :(得分:1)
我不确定更改tableView的默认行为是否是个好主意。 但如果你真的想,你可以使用缩进。
// Might be target of button
- (void) setEditingMode
{
tableView.editing = YES;
[tableView reloadData];
}
// Might be target of button
- (void) resetEditingMode
{
tableView.editing = NO;
[tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = ...;
....
Boolean cellIsEditable = ...;
if( tableView.editing && !cellIsEditable )
{
cell.indentationWidth = ...; // (please experiment to find the exact value)
cell.indentationLevel = 1;
}
else
{
cell.indentationLevel = 0;
}
}
答案 1 :(得分:0)
对UITableViewCell进行子类化并自行滑动不可编辑的行。
@interface MyHistoryTableViewCell : UITableViewCell
@end
@implementation MyHistoryTableViewCell : UITableViewCell
#define CELL_SLIDE_WIDTH 32 // found empirically
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
if ( self.editingStyle == UITableViewCellEditingStyleNone ) { // not editable
CGRect frame = self.frame;
UITableView *tableView = ((UITableView *)(self.superview));
if ( tableView.editing ) { // going to editing mode
frame.origin.x = CELL_SLIDE_WIDTH;
frame.size.width = tableView.frame.size.width - CELL_SLIDE_WIDTH;
} else { // ending editing
frame.origin.x = 0;
frame.size.width = tableView.frame.size.width;
}
[UIView animateWithDuration:0.3 animations:^{ // match the tableView slide duration
self.frame = frame;
}];
}
}
@end
如果你有需要锚定在单元格右侧的子视图(例如,一个不应该滑动的按钮),那么
mySubview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; // anchors to the right margin
此外,在设置子视图的frame.origin.x时,您必须具有创造性。我尝试了很多价值观,直到找到了有用的东西(这个价值对我来说毫无意义)。