2012-04-23 2 views
6

Я портирую собственное приложение с объектами C в решение Monotouch.MonoTouch Как реализовать RowSelected для UITableViewController со статическими ячейками

У меня есть в моем раскадровке табличное представление с некоторыми статическими ячейками таблицы.

Используя следующий Objective-C код полученного выбор из таблицы

- (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; 
} 

Теперь я хочу сделать то же самое в MonoTouch, но не может узнать, как и все примеры, которые я нашел в сети , используют DataSource и UITableViewDelegate.

Но при использовании этого подхода Мои ячейки «Статические» удаляются, заменяются.

Это то, что я пытаюсь

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."); 
    } 
} 

Somebody предложение?

+0

я не как следует, ваши камеры удалены? Код, который вы вставили для действия, когда ячейка выбрана, и у вас есть код с комментариями, почему вы прокомментировали это? –

+0

Прокомментированный код - это копия моего кода object-c, поскольку я переводил его в C#. Для этого нет никакой важности. Я не уверен, почему ячейки удалены. Я думаю, это потому, что у меня нет реализации метода 'numberOfRowsInSection' и 'cellForRowAtIndexPath', которые используются при создании таблиц из кода. Не статически ... «Я ДУМАЮ ...» – user1346056

ответ

7

Я думаю, вы должны попробовать использовать WeakDelegate, чтобы сделать эту работу.

в контроллере проволоке вверх метод следующим образом:

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

Затем установите TableView.WeakDelegate = this;

Поиграйте с ним, я не могу иметь свои параметры совершенно правильно, и т.д.

+0

Я проверил это и обнаружил, что настройка WeakDelegate заставила статические ячейки очищаться. Однако, если вы добавите метод RowSelected с атрибутом Export к собственному UITableViewController, вы получите ожидаемый результат. – holmes

+0

Так что статические ячейки, которые вы настраиваете, должны устанавливать контроллер как делегат для 'UITableView'. То, что вы сделали, вероятно, является единственным способом заставить его работать с MonoTouch. Это одна вещь, которую я хочу испытать сам, я никогда не использовал раскадровки, так как они требуют iOS 5. Мы добираемся до такой степени, что для iOS 5 больше не может быть большой проблемой. – jonathanpeppers

+0

Выполнение этого, без слабой работы делегата. Thx ребята! Я бы дал голос, но у меня недостаточно репутации, whoehoeee = P – user1346056

Смежные вопросы