回答 [アクセサリを使用していない場合 (詳細開示など)]
(0) テーブルがセットアップされていると思います &c.
(1) このソリューションは、テーブル セルが常にドラッグ可能な場合にのみ機能します。これを viewDidLoad で Table View Controller .m ファイルに追加します。
- (void)viewDidLoad
{
[super viewDidLoad];
[self setEditing:YES];
}
(2) セルを並べ替えられるようにするcell.showsReorderControl = YES;
には、tableView:cellForRowAtIndexPath: に追加します。
(3) tableView:canMoveRowAtIndexPath: および tableView:moveRowAtIndexPath:toIndexPath: メソッドがあることを確認します。
- (BOOL)tableView:(UITableView *)tableview canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
(4) 左側に並べ替えコントロールが必要なため、通常そこにある削除円を削除する必要があり、tableView:editingStyleForRowAtIndexPath: メソッドがそれを行います。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
(5) 魔法が起こる最後のステップ - tableView:willDisplayCell:forRowAtIndexPath: メソッドを追加し、セルのサブビューを検索し、プライベート UITableViewCellReorderControl に絞り込み、最後にそれをオーバーライドします。
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
for(UIView* view in cell.subviews)
{
if([[[view class] description] isEqualToString:@"UITableViewCellReorderControl"])
{
// Creates a new subview the size of the entire cell
UIView *movedReorderControl = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame))];
// Adds the reorder control view to our new subview
[movedReorderControl addSubview:view];
// Adds our new subview to the cell
[cell addSubview:movedReorderControl];
// CGStuff to move it to the left
CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, -moveLeft.width, -moveLeft.height);
// Performs the transform
[movedReorderControl setTransform:transform];
}
}
}
アクセサリの場合の解決策を見つけようとして 10 時間近く費やしましたが、それができませんでした。まずは経験と知識が必要です。開示ボタンの並べ替えコントロールに同じことを行うだけでは機能しませんでした。したがって、これが今のところうまくいくことを願っています。将来それを理解したら、必ずこれを更新します。
Hoang Van Ha さん、これが初めての回答です。Objective-C の学習を始めてまだ 1 か月しか経っていないので、まだ初心者です。
私は自分のアプリで同じことをしようとしていて、その方法を何時間も探していました。これに関しては、Apple のドキュメントはあまり役に立ちません。人々が単にドキュメントにリンクするだけだと、私は非常に苛立たしいと感じました。私は彼らに怒鳴りたかった。私の答えがお役に立てば幸いです。
この記事のコードの一部を使用し、回答に合わせて調整したため、b2Cloud に多くの賞賛を送りました。