XamarinはカスタムUINavigationBarを使用してUINavigationControllerをサブクラス化しました

ケンダルトレゴ

アプリケーション全体で使用するための非標準のトップナビゲーションバーを作成しようとしています。これを達成するために、私はサブクラス化UINavigationController試みてきましたUINavigationBar

カスタムNavigationControllerクラスがあります

partial class ZooNavigationController : UINavigationController
{
    public ZooNavigationController (IntPtr handle) : base (typeof(TopNavBar), null)
    {
        this.Handle = handle;
    }
}

これは基本コンストラクターを指します

public UINavigationController (Type navigationBarType, Type toolbarType); 

私のカスタムUINavigationBarクラスの場合TopNavBarは...

public class TopNavBar : UINavigationBar
{
    public TopNavBar ()
    {
        InitCustom ();
    }

    public void InitCustom(){ 
        this.BackgroundColor = UIColor.Red; 
        // a bunch more custom stuff
    }
}

問題は、これを実行したときにTopNavBarが呼び出されないことです。コンストラクターを次のように調整しようとすると、次のようになります。

    public ZooNavigationController (IntPtr handle) : base (typeof(TopNavBar), null)
    {
        this.Handle = handle;
        TopNavBar test = (TopNavBar)this.NavigationBar;
    }

タイプをキャストできないというランタイム例外が発生したため、タイプを指定する呼び出しを無視しているようUINavigationBarです。

誰かが私がここで欠けているものを手伝ってくれる?

結局、編集すると、ストーリーボード内にカスタムUINavigationBarを設定できるという事実が欠けていたことがわかりました。それをミゲルの答えと組み合わせると、私はクラスに行き着きました

partial class TopNavBar : UINavigationBar
{
    public TopNavBar(IntPtr test) : base(test) {
    }

    [Export ("initWithCoder:")]
    public TopNavBar (NSCoder coder) : base (coder)  {
        InitCustom ();
    }
}
miguel.de.icaza

IntPtrコンストラクターは、Objective-Cによって作成され、C#に表示されるオブジェクトに応答して呼び出されます。これは一般に、これらのクラスがインスタンス化される方法ではありません。

あなたが自分自身に尋ねなければならない最初の質問は、あなたのクラスのインスタンスを誰が作成しているのかということです。

  • このクラスのインスタンスはC#から作成します。適切なパラメーターを使用してコンストラクターを呼び出します。
  • デシリアライズ中に作成される場合(たとえば、ストーリーボード、XIB、または独自のアーカイブデータからのロード)、NSCoderパラメーターを受け取るコンストラクターを提供する必要があります。
  • インスタンスをオンデマンドで再作成する(オブジェクトが破棄されたことを意味するため、問題を示している可能性がありますが、Objective-Cはその参照を保持しており、現在は再表示されています)、IntPtrコンストラクター。

上記の例では、間違いがあります。IntPtrコンストラクターをオーバーライドしています。これは、基本クラスのIntPtrコンストラクターのみを呼び出す必要があります(「Objective-cに実オブジェクトへのポインターがあるため、次のラッパーを作成する」という意味です。それ")。

私の推測では、C#を使用していると思います。その場合、必要なのは、引数をとらない新しいコンストラクターを提供することです。

public ZooNavigationController () : base (typeof (YourNavigation), typeof(YourBar)) {
   // Your own initialization goes here
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

UINavigationControllerサブクラスにカスタムボタンを追加します

分類Dev

カスタムtableviewcellを使用してUITableViewControllerのサブクラスをプログラムで初期化します

分類Dev

RxSwiftを使用したカスタムUIControlサブクラス

分類Dev

サブクラスを使用したカスタムUITabBarController

分類Dev

プログラムでUINavigationControllerのUINavigationBarをサブクラス化する方法は?

分類Dev

カスタム__new__を使用してクラスをサブクラス化するPython

分類Dev

Json.Netを使用してNameValueCollectionのカスタムサブクラスをシリアル化する

分類Dev

カスタムデータベースを使用したAWSAppSyncはサブスクリプションをサポートしていますか?

分類Dev

QTableView をサブクラス化した後、keyPressEvent を使用して矢印キーを使用できなくなりました。カスタム信号を維持したままナビゲートするためにそれらを簡単に使用するにはどうすればよいですか?

分類Dev

クラスはmypyを使用して「QObject」(タイプは「Any」)をサブクラス化できません

分類Dev

SwiftのXIBを使用したカスタムUIViewサブクラス

分類Dev

カスタムinitメソッドを使用したSKNodeサブクラス

分類Dev

カスタムListViewItem(サブクラスListViewItem)を作成します

分類Dev

awakeFromNibをサブクラス化して、スーパークラスのカスタムinit / setupメソッドを呼び出しますか?

分類Dev

UINavigationBarの外観をカスタマイズするために(もしあれば)何をサブクラス化するのですか?

分類Dev

Gsonを使用して、サブJSONオブジェクト情報をカスタムクラスを作成せずに取得する方法はありますか?

分類Dev

カスタムサブクラス化されたUICollectionViewCellクラス内にサブビューを追加します

分類Dev

MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

分類Dev

Blazor:カスタムサービスをアクティブ化しようとしているときにInvalidOperationExceptionが発生しました

分類Dev

サブクラス化されたNSArrayControllerはカスタムプロパティにバインドします

分類Dev

SwiftUIを使用したUINavigationBarのカスタム背景色

分類Dev

AnyClassに準拠していないため、カスタムUINavigationBar / UIToolbarをUINavigationControllerに渡すことができません

分類Dev

AnyClassに準拠していないため、カスタムUINavigationBar / UIToolbarをUINavigationControllerに渡すことができません

分類Dev

カスタムコンストラクターを使用してオブジェクトをクラス属性としてインスタンス化する(C ++)

分類Dev

ライブLinuxまたはカスタムディストリビューションをバックアップとして使用していますか?

分類Dev

Codableを使用して、参照ループを含むカスタムクラスをシリアル化します

分類Dev

カスタムUINavigationBarは、指定された高さを尊重しません

分類Dev

protobuf-netを使用してカスタムクラスをプリミティブ型としてシリアル化します

分類Dev

XmlSerializerを使用してDataTableをカスタムクラスに逆シリアル化します

Related 関連記事

  1. 1

    UINavigationControllerサブクラスにカスタムボタンを追加します

  2. 2

    カスタムtableviewcellを使用してUITableViewControllerのサブクラスをプログラムで初期化します

  3. 3

    RxSwiftを使用したカスタムUIControlサブクラス

  4. 4

    サブクラスを使用したカスタムUITabBarController

  5. 5

    プログラムでUINavigationControllerのUINavigationBarをサブクラス化する方法は?

  6. 6

    カスタム__new__を使用してクラスをサブクラス化するPython

  7. 7

    Json.Netを使用してNameValueCollectionのカスタムサブクラスをシリアル化する

  8. 8

    カスタムデータベースを使用したAWSAppSyncはサブスクリプションをサポートしていますか?

  9. 9

    QTableView をサブクラス化した後、keyPressEvent を使用して矢印キーを使用できなくなりました。カスタム信号を維持したままナビゲートするためにそれらを簡単に使用するにはどうすればよいですか?

  10. 10

    クラスはmypyを使用して「QObject」(タイプは「Any」)をサブクラス化できません

  11. 11

    SwiftのXIBを使用したカスタムUIViewサブクラス

  12. 12

    カスタムinitメソッドを使用したSKNodeサブクラス

  13. 13

    カスタムListViewItem(サブクラスListViewItem)を作成します

  14. 14

    awakeFromNibをサブクラス化して、スーパークラスのカスタムinit / setupメソッドを呼び出しますか?

  15. 15

    UINavigationBarの外観をカスタマイズするために(もしあれば)何をサブクラス化するのですか?

  16. 16

    Gsonを使用して、サブJSONオブジェクト情報をカスタムクラスを作成せずに取得する方法はありますか?

  17. 17

    カスタムサブクラス化されたUICollectionViewCellクラス内にサブビューを追加します

  18. 18

    MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

  19. 19

    Blazor:カスタムサービスをアクティブ化しようとしているときにInvalidOperationExceptionが発生しました

  20. 20

    サブクラス化されたNSArrayControllerはカスタムプロパティにバインドします

  21. 21

    SwiftUIを使用したUINavigationBarのカスタム背景色

  22. 22

    AnyClassに準拠していないため、カスタムUINavigationBar / UIToolbarをUINavigationControllerに渡すことができません

  23. 23

    AnyClassに準拠していないため、カスタムUINavigationBar / UIToolbarをUINavigationControllerに渡すことができません

  24. 24

    カスタムコンストラクターを使用してオブジェクトをクラス属性としてインスタンス化する(C ++)

  25. 25

    ライブLinuxまたはカスタムディストリビューションをバックアップとして使用していますか?

  26. 26

    Codableを使用して、参照ループを含むカスタムクラスをシリアル化します

  27. 27

    カスタムUINavigationBarは、指定された高さを尊重しません

  28. 28

    protobuf-netを使用してカスタムクラスをプリミティブ型としてシリアル化します

  29. 29

    XmlSerializerを使用してDataTableをカスタムクラスに逆シリアル化します

ホットタグ

アーカイブ