这里有关于我的引用的更多信息...我有一个tableview,当你触摸tableview中的一个单元格时,它会在窗口上添加一个名为DraggableView的自定义视图,其位置与你选择的tableview行完全相同,并且大小相同。
编辑:这是我将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);
}
我需要的是这个新创建的可拖动视图,当他的手指仍然在行的顶部时,用户的“焦点”。这是为了使可拖动视图在创建后可拖动 到目前为止发生的事情是,可拖动的视图已创建,但我必须释放我的手指,然后点击可拖动的视图来平移它。我希望跳过松开手指并触摸视图的步骤,这样我就可以在创建后拖动它。有什么想法吗?
答案 0 :(得分:1)
来自Apple文档:
- (BOOL)becomeFirstResponder
“您可以调用此方法来创建响应者对象,例如视图作为第一响应者。但是,如果它是视图层次结构的一部分,则只应在该视图上调用它。如果视图的窗口属性包含UIWindow对象,它已安装在视图层次结构中;如果它返回nil,则视图将从任何层次结构中分离。“