3

tableviewセルをドラッグ アンド ドロップできるように編集可能な状態にしておくアプリケーションがあります。しかし、私がやっていると、cellすべての要素が中央に配置され、3 行の右側の開示ボタンがあるように、のデザインが変更されます。[tableview setEditing:YES animated:YES];これを行うには、セルの同じデザインを維持する必要があります。開示ボタンを使用せずに、編集不可能なテーブル ビューの場合と同じセル レイアウトを維持する必要があります。なので

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone;
}

- (BOOL) tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {

    NSInteger sourceRow = sourceIndexPath.row;
    NSInteger destRow = destinationIndexPath.row;
    id object = [array objectAtIndex:sourceRow];

    [array removeObjectAtIndex:sourceRow];
    [array insertObject:object atIndex:destRow];

}

これを達成するために誰かが私を助けることができますか?

4

2 に答える 2

2

これを試してください:

このメソッドを tableView デリゲートに追加して、インデントを防ぎます。

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{
  return  NO;
}

次に、UITableViewCell サブクラスで、すべての並べ替えビューのアルファを 0 に設定します。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{
  [super setEditing:editing animated:animated];
  if (editing) {
    for (UIView * view in self.subviews) {
      NSLog(@"%@",view);
      if ([NSStringFromClass([view class]) rangeOfString: @"Reorder"].location != NSNotFound) {
        for (UIView *sv in view.subviews) {
          sv.alpha = 0.0f;
        }
      }
    }
  }
}

これはハックであり、Apple がこのアプリを拒否するかどうかはわかりません。

于 2013-05-01T10:13:00.993 に答える