我想在UITextField上创建自定义清除按钮,即使用rightView并将图像放在那里,问题是将原始清除按钮事件附加到该自定义rightView。
在Objective-C中,我可以这样做:
SEL clearButtonSelector = NSSelectorFromString(@"clearButton");
// Reference clearButton getter
IMP clearButtonImplementation = [self methodForSelector:clearButtonSelector];
// Create function pointer that returns UIButton from implementation of method that contains clearButtonSelector
UIButton * (* clearButtonFunctionPointer)(id, SEL) = (void *)clearButtonImplementation;
// Set clearTextFieldButton reference to “clearButton” from clearButtonSelector
UIButton *_clearTextFieldButton = clearButtonFunctionPointer(self, clearButtonSelector);
[_clearTextFieldButton setImage:[UIImage imageNamed:@"icon_remove"] forState:UIControlStateNormal];
self.hasClearButtonAsRightView = YES;
现在如何将其转换为Swift?2或者有什么解决办法吗?
6条答案
按热度按时间avwztpqn1#
您可以添加自定义按钮作为
UITextField
的右视图,如下所示jfewjypa2#
按照其他答案中的建议实现一个自定义文本字段不是一个好主意。如果可能的话,您应该尝试使用扩展而不是继承,因为使用继承,您更有可能需要对代码库进行重大更改以响应更改,而使用扩展,更改起来要灵活得多。
我强烈建议您不要实现自定义文本字段,而是像下面这样扩展UITextField类:
然后使用它,你只是这样做:
uqdfh47h3#
这是我在Swift 3中的解决方案。除了已经存在的答案之外,我还通过覆盖
leftViewRect()
和rightViewRect()
确保了文本字段的左视图和右视图(即搜索放大镜图像视图和自定义清除按钮)的左/右都有一个填充。否则,它们将停留在文本字段的右边。3vpjnl9f4#
在iOS 14中,没有一个解决方案对我有效。清除按钮对于不同的设备大小得到了错误的偏移。我有图像。如果你没有,你可以从SF Symbols下载。名称是xmark.circle.fill最后,我用了这个
cld4siwp5#
已更新至Swift 5,基于@marmoy答案:
sgtfey8w6#
对于右填充&侦听文本字段的clear委托