UITableview + AlertDialog pasar a otra vista

62 views
Skip to first unread message

Marcela Peña Murallas

unread,
Dec 16, 2013, 9:46:33 AM12/16/13
to mono-h...@googlegroups.com
Hola colegas, soy nueva en la programación e iOS, estoy programando con Xamarin que básicamente es monotouch...tengo una duda que para mi es el mundo entero, pero espero que alguno de ustedes me pueda ayudar en la solución de esta. 

en mi vista principal (clase), hago un llamado a un UItableView para dibujar una tabla con unos datos...al dar click en una de las celdas, implemento un alertdialog donde al dar click en el boton "Detalles" quiero que me cargue una nueva vista (clase - viewcontroller), hasta el momento no he podido hacerlo...no se si para hacer cambios de vista solo se puedan implementar en un uiviewcontroller, desde un tableview no se puede? o de que manera podría realizar lo que estoy necesitando??.

Les agradecería enormemente cualquier ayuda que me puedan brindar. 

Juan M Gómez

unread,
Dec 16, 2013, 10:03:28 AM12/16/13
to mono-h...@googlegroups.com
Buenas Macerla,

Para poder cambiar el UIViewController actual, tienes que utilizar la propiedad NavigationController que normalmente está asociada a cada UIViewController. Imagino que tu UITableView está en un UITableViewController (no es obligatorio pero Apple recomienda que sea así), en cualquier caso UITableViewController es una especialización de UIViewController así que igualmente podrás acceder a NavigationController. Lo que debes hacer es interceptar el evento click de detalles y hacer una llamada a NavigationController.PushViewController(TU_NUEVO_UIVIEWCONTROLLER,true); 


Saludos,

Juan M Gómez
Contractor Software Engineer
juaman...@gmail.com 
www.jmgomez.me 

   twitter linkedIn     



--
Has recibido este mensaje porque estás suscrito al grupo "Mono Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a mono-hispano...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a mono-h...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/mono-hispano.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Marce Murallas

unread,
Dec 16, 2013, 2:10:44 PM12/16/13
to mono-h...@googlegroups.com
Muchas gracias Juan por responder. Pero la opción de "pushviewcontroller" no me aparece...mi uitableview la tengo con un uitableviewSource...supongo que tiene algo que ver...intente pasarla a ViewController pero al hacer el llamado en la clase principal no me reconoce lo que tenía antes...no se que hacer...podrías recrear un pequeño código de el llamado...o si sabes de algún ejemplo en la web, te lo agradecería enormemente


--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Mono Hispano" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/mono-hispano/3a_j1kvO0B8/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a mono-hispano...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a mono-h...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/mono-hispano.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--

Marcela Peña Murallas
Ingeniera de Sistemas - UIS

Juan M Gómez

unread,
Dec 16, 2013, 2:25:59 PM12/16/13
to mono-h...@googlegroups.com
Si no enseñas lo que estás haciendo, es difícil que podamos ayudarte :-). Aquí tienes algo parecido a lo que estás haciendo (http://docs.xamarin.com/recipes/ios/content_controls/tables/handle_a_row_click/) . Una opción sería pasar el NavigationController (propiedad de tu UIViewController) en el constructor, referenciarlo como variable local y desde ahí llamar al UIViewController en el click de tu alert. 

De todas formas, para tu escenario es muuucho más simple utilizar MonoTouch.Dialog http://docs.xamarin.com/guides/ios/user_interface/monotouch.dialog/

Juan M Gómez
Contractor Software Engineer
juaman...@gmail.com 
www.jmgomez.me 

   twitter linkedIn     



Marcela Peña Murallas

unread,
Dec 16, 2013, 3:07:15 PM12/16/13
to mono-h...@googlegroups.com

Juan tienes toda la razón que pena, mira esta es una parte del código, la clase donde hago el llamado al tableView..y el evento de dar click en el AlertView para pasar de vista. 


public partial class Credits : UIViewController
{
   UITableView table;
   ....
   ....
   public override void ViewDidLoad ()                
  {

     listcreditos.TouchUpInside += delegate  // listcreditos es un botón..al oprimirlo me cambiará a mi nueva clase que contiene el UITableView

     {

                                         

table = new UITableView(View.Bounds);                                           

table.AutoresizingMask = UIViewAutoresizing.All;                                      

table.Source = new TableSource(lista);  // lista es un array con los datos con que lleno la TableView                                              

Add (table);                       

       }  ;
}

---------------------------------------//---------------------------------------
public class TableSource: UITableViewSource
{
   UINavigationController controller = new UINavigationController();
   ....
   ....
   public override void RowSelected (UITableView tableView, NSIndexPath indexPath)

{                               

     int buttonClicked = -1;                             

     UIAlertView alert = new UIAlertView(tableItems[indexPath.Row].numero_credito, "Estado:" + tableItems[indexPath.Row].estado, null, "Volver", "Ver Detalles");

     

      tableView.DeselectRow (indexPath, true);



                           

      alert.Clicked += (sender, buttonArgs) =>                                  

       {                                 

                   

          if (buttonArgs.ButtonIndex == 0) // "Volver"                                      

                                                    

     m=0;                                                                                   

     Console.WriteLine("Ok clicked");                                             

}

if (buttonArgs.ButtonIndex == 1) // "Ver Detalles"                                       

                                                    

     m=1;                                                

     controller.PushViewController(this.detalle, true);                                          

}

};       





Este es el código que tengo en el momento, al dar click al botón "Ver Detalles" en el AlertView lo que quiero es que cambie de vista y muestre una información que ya tengo en esa clase..pero nunca pasa la vista, no pasa nada! :S
 


No se si como lo estoy haciendo sea la mejor forma o si existe otra mas sencilla 










Juan M Gómez

unread,
Dec 16, 2013, 3:29:27 PM12/16/13
to mono-h...@googlegroups.com
Te comenté que lo pasaras en el constructor de la clase. 

Algo así debería funcionar:
Imagino que tu AppDelegate tendrá algo parecido a esto:

this.windows.RootViewController = new Credits();

Cambialo por algo así

var nav = UINavigationController()
nav.PushViewController(new Credits(),false);
this.window.RootViewController = nav

Luego en credits, la instanciación del table source: 
table.Source = new TableSource(lista, this.NavigationController)

Y por último en el constructor de TableSource

public TableSource( TipoLista lista, UINavigationController controller){
  this.controller = controller; 
}

Y borra la instanciación de controller (controller = new UINav..). Por cierto muy desafortunado el nombre controller, nav o navigation es más apropiado. 

Como te comenté, con muchísimas menos líneas tendrías eso funcionando con MonoTouch.Dialog (aunque es preferible que entiendas bien como funcionan las tablas). 

El código está escrito de cabeza así que seguramente tenga algún tipo.

Saludos




Juan M Gómez
Contractor Software Engineer
juaman...@gmail.com 
www.jmgomez.me 

   twitter linkedIn     



Reply all
Reply to author
Forward
0 new messages