ios objective-c uitableview segue

ios - Cómo hacer una transición de inserción cuando se selecciona una UITableViewCell



objective-c segue (10)

Rápido

Esta respuesta muestra cómo pasar datos y se actualiza para Xcode 8 y Swift 3.

Aquí es cómo configurar el proyecto.

  • Crea un proyecto con TableView . Vea here para un simple ejemplo.
  • Agregue un segundo ViewController .
  • Controle la resistencia desde el primer controlador de vista con la vista de tabla al segundo controlador de vista. Elija "Mostrar" como el tipo de segue.

  • Haga clic en el segue en el guión gráfico y luego en el nombre del inspector de atributos el identificador "yourSegue". (Puede llamarlo como quiera, pero también debe usar el mismo nombre en el código).

  • (Opcional) Puede incrustar todo en un Controlador de navegación seleccionando el primer controlador de visualización en el guión gráfico y yendo a Editor> Insertar en> Controlador de navegación .

Código

Primer controlador de vista con TableView:

import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // ... // method to run when table view cell is tapped func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Segue to the second view controller self.performSegue(withIdentifier: "yourSegue", sender: self) } // This function is called before the segue override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // get a reference to the second view controller let secondViewController = segue.destination as! SecondViewController // set a variable in the second view controller with the data to pass secondViewController.receivedData = "hello" } }

Controlador de segunda vista

class SecondViewController: UIViewController { @IBOutlet weak var label: UILabel! // This variable will hold the data being passed from the First View Controller var receivedData = "" override func viewDidLoad() { super.viewDidLoad() print(receivedData) } }

Para obtener un ejemplo más básico sobre el paso de datos entre los controladores de vista, vea esta respuesta .

Tengo una lista de efectos en una vista de tabla. He creado un botón de barra superior derecha que realiza un cambio de inserción a otro controlador de vista que ayuda a crear un nuevo efecto. Ahora quiero agregar segmentos de inserción a las celdas de vista de tabla para que los valores de los efectos se carguen en el controlador de vista de efectos de adición y pueda guardar los valores editados.

La pregunta es ¿puedo crear un segue de inserción programáticamente? Si no, ¿puedo pasar el efecto a través de un prepareforsegue ? Si trato de utilizar un prepareforsegue , me prepareforsegue con un problema donde el control de arrastre desde el UITableView no me permite crear una transición de inserción al controlador de vista de agregar efectos.


Aquí hay otra opción, que no requiere el uso de didSelectRowAtIndexPath.

Simplemente conecte el segue en Interface Builder desde la celda del prototipo hasta el destino.

Desde allí puedes simplemente:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "AffiliationDetail", let destination = segue.destinationViewController as? AffiliateDetailViewController { if let cell = sender as? UITableViewCell, let indexPath = tableView.indexPathForCell(cell) { var affiliation = affiliations[indexPath.row] destination.affiliation = affiliation } } }


Puedes hacer esto siguiendo los siguientes métodos:

En primer lugar, debe importar otro controlador de vista en la vista actual.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {}

dentro del método anterior tienes que llamar a un método - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; Me gusta esto:

yourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil]; [self.navigationController YourViewController animated:YES];

De esta forma, puede lograr segue de inserción cuando se selecciona UITableViewCell .

Espero que esto te ayude ...!


Puedes usar este método:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Puede realizar una función en la selección de una celda de vista de tabla particular en esto.


Tienes 2 opciones: ctrl + arrastrar desde la celda del prototipo a la nueva vc y luego vas a seguear desde cada celda y tienes que implementar preparar para segue.

Segunda opción, en didselectrowatindexpath puedes instanciar tu nuevo viewcontroller usando self.storyboard instantiateviewcontrollerwithidentifier ..., luego llamar a pushviewcontroller o presentviewcontroller, no necesitas segues en el guión gráfico o prepararse para segue en este escenario.


control de arrastre desde View Controller hasta View Controller

Tendrá que dar un identificador a su segue:

Realice la segue:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"yourSegue" sender:self]; }

Ahora aquí está la cosa, esto solo realizará la segue, si alguna vez necesitó pasar algunos datos a ese controlador de vista. Luego debe implementar el siguiente delegado segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Make sure your segue name in storyboard is the same as this line if ([[segue identifier] isEqualToString:@"yourSegue"]) { //if you need to pass data to the next controller do it here } }


Swift 3

Después de seguir la respuesta de Ahmed Daou -> arrastre manualmente segue de vc a vc en el guión gráfico

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.performSegue(withIdentifier: "SegueIdentifier", sender: nil) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "SegueIdentifier" { //do something you want } }


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"segueIdentifier" sender:indexPath]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"segueIdentifier"]) { NSIndexPath *indexPath = (NSIndexPath *)sender; } }


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { MyViewController *myVController = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"StoryBordIdentifier"]; [self.navigationController pushViewController:myVController animated:YES]; }


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"YourPushSegueName" sender:self]; }