在触摸tableview单元格后,如何将视图指定为第一响应者?

时间:2012-03-30 00:06:27

标签: objective-c uitableview drag-and-drop becomefirstresponder

这里有关于我的引用的更多信息...我有一个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);
}

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

1 个答案:

答案 0 :(得分:1)

来自Apple文档:

- (BOOL)becomeFirstResponder

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