UIBarButtonItemの隠しAPIを読んでみる

本家SDKだとUIBarButtonItemのinitWithBarButtonSystemItemに100以上の値を指定することで特殊なボタンを作ることができる。これをMonoTouchでやってみた。

using MonoTouch.ObjCRuntime;
using MonoTouch.UIKit;
using MonoTouch.Foundation;

public class UIBarButtonItemExtended : UIBarButtonItem
{
	private static IntPtr selInitWithBarButtonSystemItemTargetAction = Selector.GetHandle ("initWithBarButtonSystemItem:target:action:");

	public UIBarButtonItemExtended (int type) : this(type, null, null) {
	}
	
	public UIBarButtonItemExtended (int type, NSObject target, Selector action) : base()
	{
		if (this.IsDirectBinding) {
			base.Handle = Messaging.IntPtr_objc_msgSend_int_IntPtr_IntPtr (
				base.Handle,
				selInitWithBarButtonSystemItemTargetAction,
				type,
				target != null ? target.Handle : IntPtr.Zero,
				action != null ? action.Handle : IntPtr.Zero
				);
		} else {
			base.Handle = Messaging.IntPtr_objc_msgSendSuper_int_IntPtr_IntPtr (
				base.SuperHandle,
				selInitWithBarButtonSystemItemTargetAction,
				type,
				target != null ? target.Handle : IntPtr.Zero,
				action != null ? action.Handle : IntPtr.Zero
				);
		}
	}
}

本家SDKでは100〜110番のボタンがあるが、109と110はボタンを作ることができなかった。
実際にボタンを作るときはこのようになる。

UIBarButtonItemExtended btn = new UIBarButtonItemExtended(100, null, null);
btn.Style = UIBarButtonItemStyle.Bordered;


ご利用はくれぐれも自己責任で。