我们在使用UITextView和UITextField的时候,可以通过它们的inputAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。
但是UIText****这些控件会有一个长按事件,会启动一个放大镜和copy等菜单,我后来使用了自定义的Uitext***屏蔽掉了copy等菜单,但是长按还是会有放大镜的效果,开始想了各种办法,比如获取该view的手势,然后remove掉长按事件;比如设置canBecomeFirstResponder的返回值为NO,这样会没有点击事件的;尝试过了很多方法,还是不行,最后又回到使用UIBUtton上面,首先想到的是UIButton的一个click方法show和hide需要的picker和toolbar,这需要控制他们的位置;后来想,UIButton可不可以使用inputAccessoryView,inputView呢,但是当我们要操作的视图不是UITextView或UITextField的时候,inputView,inputAccessoryView就变成了readonly的。
这时我们如果还想再加inputView,inputAccessoryView,按API中的说法,就需要新建一个该视图的子类,并重新声明inputAccessoryView,inputView属性为readwrite的。
如下是我的解决方案,反正实现了我的需要,大家可以参考下:
@interface MyCustomButton:UIButton
@property (readwrite, retain) UIView *inputView;
@property (readwrite, retain) UIView *inputAccessoryView;
@end
implementation
MyCustomButton
@synthesize inputView, inputAccessoryView; //有些人说需要把canBecomeFirstResponder
方法重写成下面这样,但是我使用过了,不会启动inputview,没效果 //必须在使用该自定义button的地方加一句[mCustomBtn becomeFirstResponder]; - (BOOL) canBecomeFirstResponder { return YES; } - (void)dealloc { [inputView release]; [inputAccessoryView release]; [super dealloc]; } @end