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;