¿Es posible deshabilitar didSelectRowAtIndexPath en una parte de la fila en UITableView?

Tengo una UITablaView en mi aplicación Objective C. Tengo las celdas personalizadas con una label y una UIImageView . Quiero deshabilitar una parte de las filas para deshabilitar didSelectRowAtIndexPath cuando los usuarios hacen clic en la parte de esta fila.

Quiero esto:

introduzca la descripción de la imagen aquí

¿Es posible?

Aquí está la solución simple y la más elegante que puedo pensar.

Creo que debes tener una CustomCell, que contiene el IBOutlet a imageView en el lado izquierdo 🙂 Puedes usar el método hitTest para resolver tu problema 🙂

En su CustomCell, supongamos que es la class MyTestCell, escriba esto,

 override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { if self.myImageView.frame.contains(point) { return nil } return super.hitTest(point, with: event) } 

Donde myImageView es el IBOulet de imageView en el lado izquierdo de su celda 🙂

Todo lo que estoy haciendo es comprobar dónde hizo el usuario el toque, si el punto de contacto está dentro del marco de las celdas imageView, devolverá cero como la vista. Cuando regrese, ningún evento táctil dejará de propagarse a sus vistas principales y, finalmente, nunca llegará a la celda por lo que didSelectRowAtIndexPath nunca llamó,

Por otro lado, deberías dejar de tocar la próxima vista y hacerlo simplemente llamando al mismo método en su super iOS eventualmente lo rastreará de nuevo a la celda y los activadores didSelectRowAtIndexPath

Espero eso ayude 🙂

Puede hacer un truco simple (sin la necesidad de escribir un código) para resolver este problema, agregando un button que cubre la parte en la que desea deshabilitar la selección. Obviamente, el button no debe tener ningún text o color de background (debe ser de color claro), también asegúrese de agregar restricciones adecuadas para asegurarse de que está cubierta la parte deseada de la celda.

Por lo tanto, cuando se toca el button, no debería suceder nada y didselectRow no debería recibir una llamada porque el evento real de tocar debe ser referido al button, no a la fila.

Espero que esto haya ayudado.

Este es un truco muy simple, Agregar un button en la parte de image de perfil, significa en la parte roja como se muestra en la image (proporcionada por usted). Y no hagas clic en el button hacer clic.

Codificación feliz !!!!

Simplemente coloque el button sobre el área verde y configure la label para cada button. Onclick puede realizar su funcionalidad usando la label. Me gusta esto

dentro

 func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let obj: AnyObject = self.dataList.objectAtIndex(indexPath.row); cell?.populateCellWithData(obj, indexPath: indexPath) cell?.destinationLabel.userInteractionEnabled = true let destRecognizer : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DestLabelTapped:") destRecognizer.numberOfTapsRequinetworking = 1 destRecognizer.delegate = self cell?.destinationLabel.addGestureRecognizer(destRecognizer) } 

En mi opinión, los trucos con botones y otros UIElementos que cubren el contenido no son la manera correcta de resolver el objective. Como necesitará manipulaciones adicionales con Storyboard, si necesita hacer contenido dynamic, si trabaja con restricciones y muchas más situaciones en las que necesitará controlar su contenido y la cubierta artificial. Hay pocas cosas que hacer:

  1. Establezca la selección de UITableView en No Selection
  2. Ponga la segunda parte que desea que esté activa en UIView . Esta UIView será el contenedor de contenido.
  3. Agregue UITapGestureRecognizer a UIView

     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectCellAction:)]; 
  4. Agregue IBAction donde podría hacer todo lo que necesita.

     - (IBAction)selectCellAction:(id)sender { // do what you need } 

Y eso es todo.

Simplemente puede cambiar las width constraints to 0 vista de image width constraints to 0 . Donde se quiere realizar la acción se realiza. Como por ejemplo:

1) Si usa un button que cubra la image.

2) Si toma una barra de navigation, allí toma un button y realiza la acción.

espero que esto ayude.