0

これが私の状況に関する詳細です...テーブルビュー内のセルに触れると、ドラッグ可能なビューと呼ばれるカスタムビューが、選択したテーブルビュー行とまったく同じ位置のウィンドウに追加され、同じサイズになります.

編集: DraggableView サブビューをビューに追加する方法は次のとおりです。このコードは、カスタム tableviewcell クラスにあります。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *topmostView = [[[super superview] superview] superview];
    UITableView *parentTableView = (UITableView *)[self superview];

    CGPoint draggablePoint = parentTableView.frame.origin;
    CGSize draggableSize = parentTableView.frame.size;
    draggablePoint.y += indexPath.row * 44;

    dragView.frame = CGRectMake(draggablePoint.x, draggablePoint.y, draggableSize.width, 44);
   [topmostView addSubview:dragView];
}

このドラッグ可能なビューは、ドラッグできるように作成されています。指定された初期化子で、UIPanGestureRecognizer をビューに追加して、パンできるようにします。私はこれを次のようにします:

- (void) activatePan {

UIPanGestureRecognizer *pan = 
[[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panMove:)] autorelease];
[self addGestureRecognizer:pan];
}

- (void) panMove:(UIPanGestureRecognizer*)recognizer {    
CGPoint touchLocation;

if (recognizer.state == UIGestureRecognizerStateBegan) {
    currentFrame = self.frame;

    touchLocation = [recognizer locationInView:self];
}

CGPoint translatedPoint = [(UIPanGestureRecognizer*)recognizer translationInView:self];

//The object is being moved across the screen
self.frame = CGRectMake(currentFrame.origin.x + translatedPoint.x, currentFrame.origin.y + translatedPoint.y, currentFrame.size.width, currentFrame.size.height);
}

私が必要とするのは、この新しく作成されたドラッグ可能なビューが、ユーザーの指がまだ行の上にあるときにユーザーの「フォーカス」を持つことです。これは、ドラッグ可能なビューが作成されるとドラッグ可能になるようにするためです。
これで、ドラッグ可能なビューが作成されましたが、指を離し、ドラッグ可能なビューをタップしてパンする必要があります。指を離してビューに触れるステップをスキップして、作成後にドラッグできるようにしたいと考えています。何か案は?

4

1 に答える 1

1

アップルのドキュメントから:

- (BOOL)becomeFirstResponder

「このメソッドを呼び出して、ビューなどのレスポンダー オブジェクトをファーストレスポンダーにすることができます。ただし、ビュー階層の一部である場合にのみ、そのビューで呼び出す必要があります。ビューのウィンドウ プロパティが UIWindow オブジェクトを保持している場合、それはビュー階層にインストールされています。nil が返された場合、ビューはどの階層からも切り離されています。」

于 2012-03-30T00:19:55.167 に答える