1

カスタムの戻るボタンを作成しようとしていますが、Clickedイベント以外はすべて機能しているようです。

2つの画面があります。それらをScreen1およびScreen2と呼びます。Screen1には、クリックするとScreen2に移動するボタンがあります。

次のコードは、Screen1のViewDidLoadとViewWillDisappearの両方に配置されたカスタムバックを作成しようとしている方法です(以下は、ViewWillDisappearにあるものです)。両方の関数で使用されるコードは、次のコードの最後の2行です。

protected override void ViewWillDisappear(bool animated) {
    base.ViewWillDisappear(animated);
    this.NavigationController.SetNavigationBarHidden(false, animated);
    UIBarButtonItem backBtn = new UIBarButtonItem("NewTitle", UIBarButtonItemStyle.Plain, delegate { Console.WriteLine("clicked"); });
    this.NavigationItem.BackBarButtonItem = backBtn;
}

実行中に、Screen2の戻るボタンをクリックしたときに、「クリックされた」という単語がコンソールに表示されません。また、呼び出してデフォルトを非表示にしてみました

this.NavigationItem.SetHidesBackButton(true, false);

ボタンを作成する前に、しかしそれは何にも影響しませんでした。

どんなアドバイスも大歓迎です!

4

2 に答える 2

1

デフォルト.ctorが期待どおりに機能しない場合があります。IOWはセレクターを呼び出しますが、完全に初期化されたインスタンスを常にinit提供するとは限りません(ほとんどの場合、ObjectiveC例外が発生します)。

必ず次のコードを使用してみてください。

UIBarButtonItem backBtn = new UIBarButtonItem ("NewTitle", UIBarButtonItemStyle.Plain, delegate {
   Console.WriteLine("clicked");
});
this.NavigationItem.BackBarButtonItem = backBtn;

それが機能する場合は、バグレポートをhttp://bugzilla.xamarin.com/に記入し、この質問へのリンクを追加してください。

于 2012-08-26T23:03:20.097 に答える
1

多くの調査と試行錯誤の末、次の投稿に出くわしました:http: //adrianhosey.blogspot.com/2009/06/why-wont-my-backbarbuttonitem-use-its.html(不適切な言葉があることに注意してください)ポストで)。変数BackBarButtonItemをカスタムボタンに設定しても機能しないようです。テキストを変更することはできますが、それはそれであるように見えます。

ただし、ここにある別の投稿では、プッシュコントローラーで機能する可能性があると述べていますが、私には機能していないようです。MonoTouchのボタンの質問

この問題を修正するために、次のコードが機能しました。

public override void ViewDidLoad() {
    base.ViewDidLoad();
    this.NavigationItem.SetHidesBackButton(true, false);
    UIBarButtonItem backBtn = new UIBarButtonItem("Back", UIBarButtonItemStyle.Plain, delegate {
        Console.WriteLine("clicked");
        //one of the NavigationController pop functions to go back
    });
    this.NavigationItem.LeftBarButtonItem = backBtn;
}
于 2012-09-17T23:43:24.130 に答える