-1

私のプロジェクトには、ウィジェットのように使用したい NSTextField だけを持つ TaskOverviewView というコントローラーを備えたビューがあります。NSWindow には、NSCustomView と NSScrollView もあります。ブースでは、addSubview(NSView) メソッドを使用して、TaskOverviewViewController のビューのインスタンスをサブビューとして追加しようとしました。ScrollView では機能しますが、ウィジェットは代わりに CustomView では表示されません。

コード:

TaskOverviewViewController のコード:

using System;
using System.Collections.Generic;
using System.Linq;
using MonoMac.Foundation;
using MonoMac.AppKit;

    namespace GetTheMilk.MacGUI

{
    public partial class TaskOverviewViewController : MonoMac.AppKit.NSViewController
    {
        #region Constructors

        // Called when created from unmanaged code
        public TaskOverviewViewController (IntPtr handle) : base (handle)
        {
            Initialize ();
        }

        // Called when created directly from a XIB file
        [Export ("initWithCoder:")]
        public TaskOverviewViewController (NSCoder coder) : base (coder)
        {
            Initialize ();
        }

        // Call to load from the XIB/NIB file
        public TaskOverviewViewController () : base ("TaskOverviewView", NSBundle.MainBundle)
        {
            Initialize ();
        }

        // Shared initialization code
        void Initialize ()
        {
            _taskName = new NSTextField();
            _taskName.StringValue = "HUHUH";
        }

        #endregion

        //strongly typed view accessor
        public new TaskOverviewView View {
            get {
                return (TaskOverviewView)base.View;
            }
        }
    }
}

私の StartupWindow のコントローラー:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using MonoMac.Foundation;
using MonoMac.AppKit;

namespace GetTheMilk.MacGUI
{
    public partial class StartupWindowController : MonoMac.AppKit.NSWindowController
    {
        #region Constructors

        // Called when created from unmanaged code
        public StartupWindowController (IntPtr handle) : base (handle)
        {
            Initialize ();
        }

        // Called when created directly from a XIB file
        [Export ("initWithCoder:")]
        public StartupWindowController (NSCoder coder) : base (coder)
        {
            Initialize ();
        }

        // Call to load from the XIB/NIB file
        public StartupWindowController () : base ("StartupWindow")
        {
            Initialize ();
        }

        // Shared initialization code
        void Initialize ()
        {

        }

        #endregion

        //strongly typed window accessor
        public new StartupWindow Window {
            get {
                return (StartupWindow)base.Window;
            }
        }

        partial void _ButtonClick(NSObject sender)
        {
            _Label1.StringValue = "Hello";
            TaskOverviewViewController widget = new TaskOverviewViewController();
            _cview.AddSubview(widget.View);
            _scrillView.AddSubview(widget.View);
        }
    }
}
4

1 に答える 1

0

この問題は、ScrollViewおよびCustomViewとは関係ありません。代わりに、呼び出し順序と相関します。代わりに切り替えると、ScrollViewは機能しませんが、CustomViewは機能します。解決策は問題と相関しています、私はここで尋ねました:コントローラーコンストラクターでGUIコンポーネントにアクセスするときのNullReferenceException

コードをメソッドに入れる代わりに、コードをInitialize()メソッドにドロップする必要がありAwakeFromNib()ます。

于 2012-10-24T12:56:01.587 に答える