2012-04-23 9 views
6

Estoy portando una aplicación Object-C nativa a una solución Monotouch.MonoTouch Cómo implementar RowSelected para un UITableViewController con células estáticas

Tengo en mi guión gráfico una vista de tabla, con algunas celdas de tabla estáticas.

Usando siguiente código de Objective-C A recibió una selección de la mesa

- (void) tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath 
{  // remove the row highlight 
    [aTableView deselectRowAtIndexPath:indexPath animated:YES]; 

    switch(indexPath.row) { 
     case 0: [self callWebsite]; break; 
     case 1: [self sendEmail]; break; 
     case 2: [self makePhoneCall]; break; 
    } 

    return; 
} 

Ahora quiero hacer lo mismo en MonoTouch, pero no puede averiguar cómo y todos los ejemplos que encuentro en la red , están utilizando DataSource y UITableViewDelegate.

Pero al usar ese enfoque, mis celdas "Estáticas" son removidas, reemplazadas.

Esto es lo que estoy tratando

public partial class ContactViewController : UITableViewController 
{ 
    public ContactViewController (IntPtr handle) : base (handle) 
    { 
     this.TableView.Delegate = new CustomTableViewDelegate(); 
    } 
} 

public class CustomTableViewDelegate : UITableViewDelegate 
{ 
    public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
    { 
     // Remove the row highlight 
     RowDeselected(tableView, indexPath); 

     /* 
      // Is this section our "button" section? 
      switch(indexPath.row) { 
       case 0: [self callWebsite]; break; 
       case 1: [self sendEmail]; break; 
       case 2: [self makePhoneCall]; break; 
      } 
     */ 

     Console.WriteLine("Do something meaningfull."); 
    } 
} 

Alguien alguna sugerencia?

+0

no lo hago bastante seguir, ¿cómo se eliminan sus células? El código que pegó es para la acción cuando se selecciona la celda, y tiene algún código comentado, ¿por qué lo comentó? –

+0

El código comentado, es una copia y pega de mi código objetivo-c, ya que lo traducía a C#. No tiene ninguna importancia para este problema. No estoy seguro de por qué se eliminan las células. Creo que es porque no tengo implementación del método 'numberOfRowsInSection' y 'cellForRowAtIndexPath' que se usan al crear tablas a partir de código. No de forma estática ... "PIENSO ..." – user1346056

Respuesta

7

Creo que debería intentar usar WeakDelegate para que esto funcione.

En su cable controlador hacia arriba el método de esta manera:

[Export("tableView:didSelectRowAtIndexPath:")] 
public void RowSelected (UITableView tableView, NSIndexPath indexPath) 
{ 
    //Your code here 
} 

A continuación, establezca TableView.WeakDelegate = this;

jugar con él, quizá no tenga mis parámetros exactamente a la derecha, etc.

+0

Probé esto y descubrí que al configurar el WeakDelegate se borraban las células estáticas. Sin embargo, si agrega el método RowSelected, con el atributo Export, al UITableViewController propietario, obtendrá el resultado esperado. – holmes

+0

Por lo tanto, las celdas estáticas que está configurando deben establecer el controlador como delegado para 'UITableView'. Lo que hiciste es probablemente la única forma de hacerlo funcionar con MonoTouch. Esto es algo que quiero probar por mi cuenta, nunca he usado guiones gráficos, ya que requieren iOS 5. Estamos llegando al punto en que requerir iOS 5 podría no ser un gran problema. – jonathanpeppers

+0

De hecho la implementación de esto, sin la débil asignación de delegado funciona. ¡Chicos THX! Daría una votación, pero no tengo suficiente reputación, whoehoeee = P – user1346056

Cuestiones relacionadas