在開發中有時候會遇到這樣的需求,就是一個文本框裏面的內容不容許用戶複製,或者不容許用戶將其它地方複製的內容粘貼進來,本文交給你怎麼實現禁止 UITextField 的粘貼、複製。spa
在 UITextField 中有這樣一個方法:-canPerformAction:withSender:,下面來重寫這個方法:code
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{ NSLog(@"%@", NSStringFromSelector(action)); return YES; }
運行程序,長按文本框,會出現一個菜單:orm
你看,剪切、複製、選擇、粘貼等功能都在裏面了,只要讓你不但願有的功能不出如今這個菜單上,或者乾脆沒有這個菜單就能達到咱們的目的了。開發
怎麼弄呢?it
還記得上面重寫的那個方法嗎?看看控制檯打印了啥吧:io
這都是在長按文本框的時候打印的。你看 -cut: -cop: -paste: 這些方法都在這裏,再結合這個方法的名字就能明白了,在彈出那個菜單以前,系統會調用 -canPerformAction:withSender: 這個方法一一判斷每一個功能是否容許使用。因此只須要在對應的action出現的時候返回NO就能夠了:ast
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{ if (action == @selector(copy:) || action == @selector(paste:)) { return NO; } return YES; }
再運行程序,長按文本框:form
這回找找吧複製和粘貼沒有了,咱們的目的實現了。class
若是根本就不想看見這個菜單的話,-canPerformAction:withSender: 直接 return NO 就好了,這樣不管怎麼長按,這個黑色的菜單都不會出現了。select