0

Hier ist eine weitere Information zu meiner Sitation ... Ich habe eine Tabellenansicht, die, wenn Sie eine Zelle in der Tabellenansicht berühren, fügt eine benutzerdefinierte Ansicht namens DraggableView in das Fenster an der gleichen Position wie die Tabellenansicht Zeile, die Sie ausgewählt haben, und die gleiche Größe.Wie lege ich eine Ansicht als First Responder fest, nachdem ich eine Tableview-Zelle berührt habe?

EDIT: So habe ich die Unteransicht DraggableView zur Ansicht hinzugefügt. Dieser Code ist auf der benutzerdefinierten tableviewcell Klasse:

-(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]; 
} 

Diese ziehbar Ansicht gemacht wird, so dass es ziehbar ist. Auf seinem designierten Initialisierer fügt er der Ansicht einen UIPanGestureRecognizer hinzu, so dass Sie ihn herumschwenken können. Ich tue dies, wie so:

- (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); 
} 

Was ich brauche, ist für diese neu Ziehbare Ansicht erstellt den „Fokus“ des Benutzers, wenn seine Finger immer noch an der Spitze der Reihe ist. Dies ist so, dass die ziehbare Ansicht nach der Erstellung ziehbar ist.
Was ab sofort passiert, ist, dass die ziehbare Ansicht erstellt wird, aber ich muss meinen Finger loslassen und auf die ziehbare Ansicht tippen, um sie zu verschieben. Ich möchte den Schritt des Loslassens des Fingers überspringen und die Ansicht berühren, damit ich sie ziehen kann, sobald sie erstellt wurde. Irgendwelche Ideen?

Antwort

1

Von der Apple-Dokumentation:

- (BOOL)becomeFirstResponder 

„Sie können diese Methode aufrufen, ein Responder-Objekt wie eine Ansicht, die die First Responder machen jedoch nur auf dieser Ansicht anrufen, sollten Sie, wenn es ein Teil ist. Eine Ansichtshierarchie Wenn die Fenstereigenschaft der Ansicht ein UIWindow-Objekt enthält, wurde sie in einer Ansichtshierarchie installiert. Wenn sie nil zurückgibt, wird die Ansicht von jeder Hierarchie getrennt. "

+0

Ich habe das versucht, meine DraggableView wird nicht FirstResponder .... Ich glaube, ich missbrauchte das Wort "Ersthelfer" auf meine Frage. – LilDwarf

+0

Ah, ja, es hat eine sehr spezifische Bedeutung. Ich denke, ich verstehe, was Sie jetzt meinen, aber können Sie Ihren relevanten Code hinzufügen, um es einfacher zu machen, was los ist? – rosslebeau

+0

Ich habe die Frage bearbeitet, um etwas Code hinzuzufügen, es kann dir helfen, es besser zu verstehen :) – LilDwarf

Verwandte Themen