0

这是关于我的位置的更多信息...我有一个表格视图,当您触摸表格视图中的单元格时,它会在窗口中添加一个名为 DraggableView 的自定义视图,其位置与您选择的表格视图行完全相同,并且大小相同.

编辑:这是我将 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);
}

我需要的是这个新创建的 Draggable View 当用户的手指仍然在行的顶部时具有用户的“焦点”。这是为了让可拖动视图在创建后就可以拖动。
现在发生的事情是创建了可拖动视图,但我必须松开手指,然后点击可拖动视图以平移它。我希望跳过释放手指并触摸视图的步骤,这样我就可以在创建它后拖动它。有任何想法吗?

4

1 回答 1

1

从苹果文档:

- (BOOL)becomeFirstResponder

“您可以调用此方法以使响应者对象(例如视图)成为第一响应者。但是,如果该视图是视图层次结构的一部分,则应仅在该视图上调用它。如果视图的窗口属性包含 UIWindow 对象,则它具有已安装在视图层次结构中;如果它返回 nil,则视图将从任何层次结构中分离。”

于 2012-03-30T00:19:55.167 回答