質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

0回答

978閲覧

Xamarin.iOSでUIBarButtonItemのクリックイベントを削除したい

yrema

総合スコア286

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/06/12 21:32

編集2019/06/25 14:10

UIButtonのTouchUpInside += で追加したイベントハンドラは
RemoveTarget(null, null, UIControlEvent.AllEvents);で削除できますが、
UIBarButtonItemにはRemoveTargetがありません。
同じようなことをすることはできないでしょうか?

以下のようにすれば指定したイベントハンドラだけ削除はできるみたいですが、やりたいことは「すべての」イベントに対してです。

c#

1var logoutButton = new UIBarButtonItem (UIBarButtonSystemItem.Stop) 2logoutButton.Clicked += logoutButtonEventHandler; 3logoutButton.Clicked -= logoutButtonEventHandler;

◆環境
▼Windows 10
Visual Studio Community 2017 Version 15.9.11
Xamarin 4.12.3.83
Xamarin.iOS and Xamarin.Mac SDK 12.4.0.64
▼Mac mini(Late 2014)
macOS Majave 10.14.4
Xcode 10.2.1

「2つのClickedハンドラを登録可能か」の質問の回答
以下のソースで確認できました。

c#

1 public override void ViewDidLoad () 2 { 3 base.ViewDidLoad (); 4 // Perform any additional setup after loading the view, typically from a nib. 5 6 UIBarButtonItem buttonItem = new UIBarButtonItem(UIBarButtonSystemItem.Camera); 7 buttonItem.Clicked += hander1; 8 buttonItem.Clicked += hander2; 9 10 UIToolbar toolbar = new UIToolbar(new CGRect(0, 20, View.Bounds.Width, 44)); 11 toolbar.Items = new UIBarButtonItem[] { buttonItem }; 12 View.AddSubview(toolbar); 13 } 14 15 private void hander1(object sender, EventArgs e) 16 { 17 Console.WriteLine("hander1"); 18 } 19 20 private void hander2(object sender, EventArgs e) 21 { 22 Console.WriteLine("hander2"); 23 }

ボタンを押すと以下が出力されるので2つ登録されているようです。

c#

12019-06-25 23:07:49.572 App1[339:16330630] hander1 22019-06-25 23:07:49.573 App1[339:16330630] hander2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yrema

2019/06/14 04:07

logoutButton.Clicked += hander1; logoutButton.Clicked += hander2; となっている時にhander1とhander2の両方を削除したいという意味です。 「すべてのイベント」ではなくて「すべてのイベントハンドラ」ですね。すみません。
fuzzball

2019/06/14 04:09

実際に試すことが出来ないのでお聞きしますが、それで2つのClickedハンドラを登録できるのでしょうか?
yrema

2019/06/25 14:11

>2つのClickedハンドラを登録できるのでしょうか? 動作確認できたソースを追記しました。
fuzzball

2019/06/26 00:58

C#もXamarinも知りませんが(たぶんC#のお話?)、例えばnullを代入してみるとか、Clicked(のクラス)の先にクリアするようなメソッドが生えてるとか、そういうのは調べてみましたか? 今さらかもしれませんが、タグにC#付けたほうがいいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問