titlelabel guidelines color buttons ios objective-c uibutton uitouch

ios - guidelines - UIButton con acción de retención y acción de liberación



menu ios (6)

Debes conectarte después de dos eventos 1. Toca hacia abajo, 2. Toca hacia adentro para ver los métodos de interacción de IB. Será divertido en Interface Builder. Pero puede hacerlo programáticamente también usando addTarget: action: forControlEvents:

Quiero crear un UIButton que se pueda mantener presionado, cuando se mantiene presionado llama a la acción "mantener presionado" una vez. cuando se lanza, llama a la acción "hold was release".

Este código no funciona correctamente porque el toque se puede mover dentro del botón y los eventos no se desencadenan en el orden correcto

[button handleControlEvent:UIControlEventTouchDown withBlock:^{ [self performMomentaryAction:PXActionTypeTouchDown]; }]; [button handleControlEvent:UIControlEventTouchUpInside withBlock:^{ [self performMomentaryAction:PXActionTypeTouchUp]; }];

los eventos de control de manejo se basan en la implementación de UIBUtton + bloque


Prueba esto

Agregue TouchDown, Touch Up Inside, evento Touch Up Outside a su botón ur

-(IBAction)theTouchDown:(id)sender { timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(performFunctionality) userInfo:nil } -(IBAction)theTouchUpInside:(id)sender { [timer invalidate]; timer = nil; [self performFunctionality]; } -(IBAction)theTouchUpOutside:(id)sender { [timer invalidate]; timer = nil; } -(void)performFunctionality { //write your logic }


arrastre un botón desde las herramientas (panel) y haga clic derecho sobre él. Aparecerá una lista, busque "retocar adentro" y haga clic y arrastre sobre el punto del círculo que está en frente del texto y muévalo a viewcontroller.h y defina un nombre y en viewcontroller Yo hago esto

nslog("clicked in"); repite todas las acciones para tocar y encuentra un evento apropiado de la lista


Me he enfrentado a este problema yo mismo, y sobre todo usamos estos eventos:

// Este evento funciona bien y se dispara

[aButton addTarget:self action:@selector(holdDown) forControlEvents:UIControlEventTouchDown];

// Esto no se dispara en absoluto

[aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpInside];

Solución:-

Use Long Press Gesture Recognizer: -

UILongPressGestureRecognizer *btn_LongPress_gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleBtnLongPressgesture:)]; [aButton addGestureRecognizer:btn_LongPress_gesture];

Implementación del gesto: -

- (void)handleBtnLongPressgesture:(UILongPressGestureRecognizer *)recognizer{ //as you hold the button this would fire if (recognizer.state == UIGestureRecognizerStateBegan) { [self holdDown]; } //as you release the button this would fire if (recognizer.state == UIGestureRecognizerStateEnded) { [self holdRelease]; } }


prueba esto

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.frame = CGRectMake(xValue, yValue, 45, 45); [aButton addTarget:self action:@selector(holdDown) forControlEvents:UIControlEventTouchDown]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpInside]; - (void)holdDown { NSLog(@"hold Down"); } - (void)holdRelease { NSLog(@"hold release"); }

para el caso de NSPratik: puede usar el evento UIControlEventTouchUpOutside Si el usuario presiona prolongadamente el botón y después de un tiempo, en lugar de soltar el dedo, el usuario moverá su dedo fuera de los límites del botón. solo agrega un evento más.

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.frame = CGRectMake(xValue, yValue, 45, 45); [aButton addTarget:self action:@selector(holdDown) forControlEvents:UIControlEventTouchDown]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpInside]; [aButton addTarget:self action:@selector(holdReleaseOutSide) forControlEvents:UIControlEventTouchUpOutside]; //add this for your case releasing the finger out side of the button''s frame //add this method along with other methods - (void)holdReleaseOutSide { NSLog(@"hold release out side"); }

Versión Swift

var aButton:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton aButton.frame = CGRectMake(xValue,yValue, 45, 45) aButton.setTitle("aButton", forState: UIControlState.Normal) aButton.backgroundColor = UIColor.greenColor() aButton.addTarget(self, action: Selector("holdRelease:"), forControlEvents: UIControlEvents.TouchUpInside); aButton.addTarget(self, action: Selector("HoldDown:"), forControlEvents: UIControlEvents.TouchDown) self.addSubview(testButton) //target functions func HoldDown(sender:UIButton) { println("hold down") } func holdRelease(sender:UIButton) { println("hold release") }


**in Swift 3.0,** btnPasswordShow.addTarget(self, action:#selector(btnShowPasswordClickHoldDown), for: .touchDown) btnPasswordShow.addTarget(self, action:#selector(btnShowPasswordClickRelease), for: .touchUpInside) func btnShowPasswordClickHoldDown(){ txtpassword.isSecureTextEntry = false } func btnShowPasswordClickRelease(){ txtpassword.isSecureTextEntry = true }