2011-10-29 3 views
2

MonoDevelop(v2.8)とMonoTouch(v4.2.2)を使用して小さなiPhoneアプリケーションを開発しようとしています。MonoTouch UITableViewControllerとTableFooterView

私のホーム画面は、プレゼンテーションのためにUITableViewを使用するUITableViewControllerによって表されます。私はいくつかの他のコントロール(2つのラベルと2つのボタン)でUITableView.TableFooterView(UIViewオブジェクト)を埋めたいです。

これを行うには、SearchViewと呼ばれる「サブビュー」を作成しました。これはUIViewControllerで表され、プレゼンテーションには単純なUIViewを使用します。私はこのビューをtableviewのフッタービューとして割り当てます。

public partial class HomeScreen : UITableViewController 
{  
    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     SearchViewController searchViewController = new SearchViewController(); 
     this.TableView.TableFooterView = searchViewController.View; 

    } 
} 

これは正しいですか?

あなたがビュー(UIView)を作成し、それをUIViewControllerで消費すると仮定するのは正しいですか?

+0

あなたの質問には関係ない上記のコードで問題に遭遇することがあります。なぜなら 'searchViewController'はローカル変数とそれに対する参照がe 'ViewDidLoad'が返ってくるときに気をつけます(ビューはコントローラではなく参照されます)。これにより、** GC **がアプリケーションをクラッシュさせる可能性のある 'searchViewController'を収集することが可能になります。これを避ける最も簡単な方法は、*あなたの変数を*フィールド*にプロモートすることです(メソッドが戻ると参照が存在します)。 – poupou

+0

ありがとうpoupuo。私はすでにこれを知っています。私は物事を理解できるように宣言をメソッドに入れました。私はまた、この問題が近い将来モノタッチチームによって解決されることを知っています。 私の質問は何ですか? – John

答えて

1
- (void)loadView { 
[super loadView]; 
sBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0,0,320,30)]; 
sBar.delegate = self; 
[self.view addSubview:sBar]; 

このようなサブビューを追加できます。sbarは検索バーです。ボタン、ラベル、テキストビュー、テキストフィールドなどのコントローラも追加できます。

あなたも

public virtual float GetHeightForFooter(UITableView tableView, int sectionIndex) 

をオーバーライドして、高さを返す必要がありますiOSの5のとおり、あなたが公共の仮想のUIView GetViewForFooter(のUITableViewのtableView、int型sectionIndex)

public override UIView GetViewForFooter(UITableView tableView, int sectionIndex) 
    { 
     // Write a method to get the proper Section via the sectionIndex 
     var section = GetSection(sectionIndex); 
     if (section != null) 
     { 
      if (section.FooterView == null && !string.IsNullOrEmpty(section.FooterText)) 
      { 
       // Create your FooterView here 
       section.FooterView = CreateFooterView(tableView, section.FooterText); 
      } 

      return section.FooterView; 
     } 

     return null; 
    } 

を上書きすることができ、あなたUITableViewDataSourceで

+0

はい、私は知っていますが、UITableViewControllerが作成されたときにthis.TableView.TableFooterViewプロパティがnullであるため、this.TableView.TableFooterView.AddSubViewを実行できません。私はまた、それが有線のものをレンダリングbeacuse TableView(this.TableView.AddSubView)にサブビューを追加することはできません。 – John

0

FooterView

関連する問題