2

画面の 1 つで、UIView (いくつかのラベルとボタンを含む) を DialogViewController に追加する必要があります。これには TableView ヘッダーを使用していない理由は、テーブルがスクロールされたときにこのビューをスクロールさせたくないからです。

カスタム ビューをナビゲーション バーに追加すると、これを実現できますが、ビューはタッチを受け取りません (ナビゲーション コントローラーがそれらを食べます)。

また、カスタム ビューを DialogsViewController 親コントローラーに追加しようとしましたが、機能している間、LoadView() でテーブルビューのフレームのサイズを変更しても何もしません。

DialogViewController にカスタム ビューを追加する他の方法はありますか?

ありがとうございました。

4

1 に答える 1

5

スクロールしないヘッダーを追加するには、追加する追加のビューとDialogViewControllerのビューの両方がビューに含まれるコントローラーを作成できます。たとえば、次の簡単な例では、追加のコントローラー(この場合はコンテナーと呼ばれます)のサブビューとして、DialogViewControllerのビューとともにUILabelを追加します。

   [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        UIWindow window;
        MyDialogViewController dvc;
        UIViewController container;
        float labelHeight = 30;

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            container = new UIViewController ();

            container.View.AddSubview (new UILabel (new RectangleF (0, 0, UIScreen.MainScreen.Bounds.Width, labelHeight)){
                Text = "my label", BackgroundColor = UIColor.Green});

            dvc = new MyDialogViewController (labelHeight);

            container.View.AddSubview (dvc.TableView);

            window.RootViewController = container;

            window.MakeKeyAndVisible ();

            return true;
        }

    }

次に、DialogViewControllerは、ViewDidLoadメソッドでTableViewの高さを調整します。

   public partial class MyDialogViewController : DialogViewController
    {
        float labelHeight;

        public MyDialogViewController (float labelHeight) : base (UITableViewStyle.Grouped, null)
        {
            this.labelHeight = labelHeight;

            Root = new RootElement ("MyDialogViewController") {
                new Section (){
                    new StringElement ("one"),
                    new StringElement ("two"),
                    new StringElement ("three")
                }
            };
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            TableView.Frame = new RectangleF (TableView.Frame.Left, TableView.Frame.Top + labelHeight, TableView.Frame.Width, TableView.Frame.Height - labelHeight);
        }
    }

シミュレータでの結果を示すスクリーンショットは次のとおりです。 ここに画像の説明を入力してください

于 2012-10-26T15:17:37.197 に答える