セルを別のセルにドラッグできるようにしたいと思います。離すと、セルが効果的に「マージ」されます (別のセルが表示されます)。UITableView
が最適なコントロールなのかUICollectionView
. 進め方について何か考えがある人はいますか?
質問する
1852 次
3 に答える
4
適切に取得できなかった可能性がありますが、取得したように、ドラッグしてセルをマージしたいので、いくつかのコードを実装してください。これを見てください。
このようなものが欲しいなら...
そのような編集コードを使用してください:---
ViewDidLoad で配列を初期化し、テーブルを次のように編集モードに設定します。
fruitsArray=[[NSMutableArray alloc] initWithObjects:@"Apple",@"Banana",@"Mango",@"Guava",@"PineApple",@"Watermelon",@"Grapes",@"GroundNut",@"Muskmelon",@"Orange",@"Cherry",nil];
[tblView setEditing:YES];
tableView のデータソースを次のように設定:->
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
if (sourceIndexPath.row!=destinationIndexPath.row) {
NSString *sourceString=[fruitsArray objectAtIndex:sourceIndexPath.row];
NSString *destinationString=[fruitsArray objectAtIndex:destinationIndexPath.row];
destinationString=[destinationString stringByAppendingFormat:@",%@",sourceString];
[fruitsArray replaceObjectAtIndex:destinationIndexPath.row withObject:destinationString];
[fruitsArray removeObjectAtIndex:sourceIndexPath.row];
[tblView reloadData];
}
}
このサンプルコードを試してください
于 2013-07-22T13:57:56.903 に答える
2
これは、疑似コードで開発するために使用したソリューションです。
UILongPressGestureRecognizer
をUITableViewに追加します- で
UIGestureRecognizerStateBegan
、 を使用して、[UITableView indexPathForRowAtPoint]
どのセルが「長押し」されているかを判断します。このセルをhoverUITableViewCell
に変えます。 - 参照変数を対応するモデル オブジェクトに設定します。
- を使用し
UIGraphicsBeginImageContextWithOptions
て、実際の UITableViewCell コンテンツのイメージをレンダリングします。を作成し、UIImageView
カスタム クロームを追加します (シャドウなど)。 - カスタム UIImageView をサブビューとして UITableView に追加し、元の選択された固定された UITableViewCell を削除します (removeFromSuperview)。
- で、ホバーの
UIGestureRecognizerStateChanged
位置を計算し、固定されたセルをアニメーション化します。 (以前に強調表示されたピン留めされたセルのアニメーションを切り替えることもできます)。UITableViewCell
UITableView
- ユーザーが LongPress を離したら、モデル配列の順序を変更し、基になるピン留めさ
UITableView
れたセルを削除してから、呼び出しですべてをリロードしbeginUpdates
ます。
境界条件にヒットしたときのスクロール、ホバーセルを元の場所にドロップするなど、他にも注意すべき点がいくつかありますが、それが基本的な要点です。うまくいけば、それは役に立ちます。
于 2013-07-25T02:58:24.460 に答える
1
これには長押しジェスチャーを使用しました。ここにサンプルコードがあります
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:cell action:nil];
longPress.delegate = self;
[cell addGestureRecognizer:longPress];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
[gestureRecognizer addTarget:self action:@selector(moveRight:)];
}
return YES;
if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
[gestureRecognizer addTarget:self action:@selector(tapAction:)];
}
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
- (void)moveRight:(UILongPressGestureRecognizer *)sender {
/*if (sender.view.tag==4)
{
[super setEditing:YES animated:YES];
[self.Table4 setEditing:YES animated:YES];
}
else
{
*/
UIView *view = sender.view;
int t = sender.view.tag;
CGPoint point = [sender locationInView:view.superview];
NSLog(@"its added %f", point.x);
NSLog(@"its added %f", point.y);
// view.frame = CGRectMake(sender.view.frame.origin.x, sender.view.frame.origin.y+200,200, 30);
CGPoint center = view.center;
center.x = point.x ;
center.y = point.y ;
view.center = center;
[self.view addSubview:view];
// int x = Table4.frame.origin.x;
// int y = Table4.frame.origin.y;
if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint center = view.center;
center.x += point.x - _priorPoint.x;
center.y += point.y - _priorPoint.y;
NSLog(@"its Center %f", center.x);
if (center.x > Table4.frame.origin.x &&
center.x < Table4.frame.origin.x +
Table4.frame.size.width &&
center.y > Table4.frame.origin.y &&
center.y < Table4.frame.origin.y +
Table4.frame.size.height
)
{
int count = [self.rowdata count];
if (t>=100 && t<200)
{
t=t-100;
[self.rowdata insertObject:[listData objectAtIndex:t] atIndex:count];
}
else if (t>=200 && t<300)
{
t=t-200;
[self.rowdata insertObject:[listData2 objectAtIndex:t] atIndex:count];
}
else
{
t=t-300;
[self.rowdata insertObject:[listData3 objectAtIndex:t] atIndex:count];
}
//[self.rowdata addObject:[listData objectAtIndex:t]];
//[sender release];
[Table4 reloadData];
[Table1 reloadData];
[Table2 reloadData];
[Table3 reloadData];
}
view.center = center;
//}
_priorPoint = point;
}
}
これはあなたにとって役立つと思います。これから必要なコードをいくつか取得します。
于 2013-07-23T04:34:45.663 に答える