如何在触摸tableview单元格后指定视图作为第一响应者?
问题描述:
下面是我的观点更多信息...我有一个tableview,当你触摸tableview中的一个单元格时,它将一个名为DraggableView的自定义视图添加到窗口中与您选择的tableview行完全相同的位置,相同的尺寸。如何在触摸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);
}
我需要的是为这个新创建的可拖动查看有用户的“焦点”时,他的手指仍然是该行的顶部。这是为了让可拖动视图在创建后可拖动。
到目前为止发生的事情是,可拖动的视图已创建,但我必须松开手指,然后点击可拖动的视图以平移它。我希望跳过释放手指并触摸视图的步骤,以便在创建完成后拖动它。有任何想法吗?
答
从Apple文档:
- (BOOL)becomeFirstResponder
“你可以调用这个方法来进行响应者的物体,如视图中的第一响应者。然而,你应该只把它的这一观点,如果它是的一部分。一个视图层次结构如果视图的window属性包含一个UIWindow对象,它已经被安装在一个视图层次结构中;如果它返回nil,视图就从任何层次结构中分离出来。
我试过了,我的DraggableView不会成为FirstResponder ....我想我在我的问题上滥用了“first responder”这个词。 – LilDwarf 2012-03-30 02:51:42
啊,是的,它有一个非常具体的含义。我想我明白你的意思,但是你可以添加你的相关代码,以便更容易地看到发生了什么? – rosslebeau 2012-03-30 03:04:31
我编辑的问题包括一些代码,它可能会帮助你更好地理解它:) – LilDwarf 2012-04-09 04:45:26