我使用 UITextField 是因为我想要一个自定义的弹出式键盘。但是,我不希望用户能够更改插入点或访问复制、粘贴菜单。
我发现了两个有用的 stackoverflow 问题,并尝试实现它们:
我通过继承 UITextField 并实现方法删除了菜单:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
但是,当用户双击该字段时,我未能阻止该字段被选中:
我曾尝试删除我认为对选择行为负责的手势识别器,但没有成功。那么我做错了什么?
@property (nonatomic, strong) MinimalTextField *inputText;
...
@synthesize inputText;
...
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
NSLog(@"%ld gestureRecognizers initially ", (long)inputText.gestureRecognizers.count);
for (UIGestureRecognizer *gestureRecognizer in inputText.gestureRecognizers) {
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
UITapGestureRecognizer *tapGestureRecognizer = (UITapGestureRecognizer *)gestureRecognizer;
if ([tapGestureRecognizer numberOfTapsRequired] == 2) {
NSLog(@"found & removed: %@", tapGestureRecognizer);
[inputText removeGestureRecognizer:tapGestureRecognizer];
}
}
if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将使用预定义颜色列表的现有程序从 Objective-C 转换为 Swift。原始代码使用 Selector 提取一个UIColor
基于它的名称表示为NSString
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
-(UIColor *)getColor:(NSString*)colorName
{
SEL selColor = NSSelectorFromString(colorName);
NSString *errorMessage = [NSString stringWithFormat:@"Invalid color name: %@ !!!", colorName];
NSAssert([UIColor respondsToSelector:selColor] == YES, errorMessage);
UIColor *mycolor = [UIColor performSelector:selColor];
return mycolor;
}
+ (instancetype)turquoiseColor {
return UIColorFromRGB(0x40E0D0);
}
+ (instancetype)mediumTurquoiseColor {
return UIColorFromRGB(0x48D1CC);
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直无法弄清楚如何使用 Swift 3.0 实现相同的功能,或者使用 Selector 是否是最好的技术。
func UIColorFromRGB(_ rgbValue: UInt) -> UIColor …
Run Code Online (Sandbox Code Playgroud)