2012-04-23 10 views
6

私はネイティブobjective-CアプリケーションをMonoTouchソリューションに移植します。MonoTouchスタティック・セルを持つUITableViewControllerのRowSelectedを実装する方法

私のストーリーボードには、静的なテーブルセルを持つテーブルビューがあります。テーブルからの選択を受けた

- (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でで同じことをやってみたいが、どのようにして、私はネット上で見つけるすべての例を見つけることができません、次のObjective-Cのコードを使用して

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

誰かどんな提案をしようとしている何ですか?

+0

を私のパラメータを持っていない可能性があり、TableView.WeakDelegate = this;

がそれを周りの再生設定しましたかなり後に、どのようにあなたの細胞が削除されますか? 貼り付けられたコードは、セルが選択されたときのアクションのためのもので、コメントのあるコードがあります。なぜコメントしましたか? –

+0

コメントアウトされたコードは、私がC#に翻訳していたので、私のobjective-cコードのコピー貼りです。この問題は重要ではありません。なぜ細胞が除去されたのか分かりません。コードからテーブルを作成するときに使用する 'numberOfRowsInSection'と 'cellForRowAtIndexPath'メソッドの実装がないためだと思います。静的ではない...「私が思う...」 – user1346056

答えて

7

この作業を行うにはWeakDelegateを試してください。お使いのコントローラのワイヤーまでそのような方法で

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

は、その後、私は私がいないなど、まさに右

+0

私はこれをテストし、WeakDelegateを設定するとスタティックセルがクリアされることがわかりました。ただし、エクスポート属性を持つRowSelectedメソッドを所有するUITableViewControllerに追加すると、予期した結果が得られます。 – holmes

+0

設定しているスタティックセルはコントローラを 'UITableView'のデリゲートとして設定する必要があります。あなたがしたことはおそらくMonoTouchで動作させる唯一の方法です。これは私が自分自身を試してみたいことですが、iOS 5が必要なのでストーリーボードを使ったことはありませんでした。iOS 5を必要とすることはもう重要ではないかもしれません。 – jonathanpeppers

+0

これを実際に実装すると、弱いデリゲートの割り当てが行われません。 Thxみんな!私は投票しますが、私は十分な評判を持っていません、whoehoeee = P – user1346056