質問編集履歴

1 「2つのClickedハンドラを登録可能か」の質問の回答追加

amery

amery score 119

2019/06/25 23:10  投稿

Xamarin.iOSでUIBarButtonItemのクリックイベントを削除したい
UIButtonのTouchUpInside += で追加したイベントハンドラは
RemoveTarget(null, null, UIControlEvent.AllEvents);で削除できますが、
UIBarButtonItemにはRemoveTargetがありません。
同じようなことをすることはできないでしょうか?
以下のようにすれば指定したイベントハンドラだけ削除はできるみたいですが、やりたいことは「すべての」イベントに対してです。
```c#
var logoutButton = new UIBarButtonItem (UIBarButtonSystemItem.Stop)
logoutButton.Clicked += logoutButtonEventHandler;
logoutButton.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
Xcode 10.2.1
「2つのClickedハンドラを登録可能か」の質問の回答
以下のソースで確認できました。
```c#
       public override void ViewDidLoad ()
       {
           base.ViewDidLoad ();
           // Perform any additional setup after loading the view, typically from a nib.
           UIBarButtonItem buttonItem = new UIBarButtonItem(UIBarButtonSystemItem.Camera);
           buttonItem.Clicked += hander1;
           buttonItem.Clicked += hander2;
           UIToolbar toolbar = new UIToolbar(new CGRect(0, 20, View.Bounds.Width, 44));
           toolbar.Items = new UIBarButtonItem[] { buttonItem };
           View.AddSubview(toolbar);
       }
       private void hander1(object sender, EventArgs e)
       {
           Console.WriteLine("hander1");
       }
       private void hander2(object sender, EventArgs e)
       {
           Console.WriteLine("hander2");
       }
```
ボタンを押すと以下が出力されるので2つ登録されているようです。
```c#
2019-06-25 23:07:49.572 App1[339:16330630] hander1
2019-06-25 23:07:49.573 App1[339:16330630] hander2
```
  • iOS

    4871 questions

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

  • Xamarin

    658 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る