【发布时间】:2016-10-10 11:56:44
【问题描述】:
【问题讨论】:
-
你尝试了什么?
-
我正在尝试这个stackoverflow.com/questions/21857408/…,但它是用于文本视图而不是文本字段,这样我无法实现所需的行为。
标签: ios swift uitextfield
【问题讨论】:
标签: ios swift uitextfield
我不得不将我的 UITextField 更改为 UITextView,然后使用来自 How to set NSString's background cornerRadius on iOS7 的解决方案,并使用 UITextView 委托进行了一些调整。
@implementation MyLayoutManager
- (void)fillBackgroundRectArray:(const CGRect *)rectArray count:(NSUInteger)rectCount forCharacterRange:(NSRange)charRange color:(UIColor *)color
{
CGFloat halfLineWidth = 4.; // change this to change corners radius
CGMutablePathRef path = CGPathCreateMutable();
if (rectCount == 1
|| (rectCount == 2 && (CGRectGetMaxX(rectArray[1]) < CGRectGetMinX(rectArray[0])))
)
{
// 1 rect or 2 rects without edges in contact
CGPathAddRect(path, NULL, CGRectInset(rectArray[0], halfLineWidth, halfLineWidth));
if (rectCount == 2)
CGPathAddRect(path, NULL, CGRectInset(rectArray[1], halfLineWidth, halfLineWidth));
}
else
{
// 2 or 3 rects
NSUInteger lastRect = rectCount - 1;
CGPathMoveToPoint(path, NULL, CGRectGetMinX(rectArray[0]) + halfLineWidth, CGRectGetMaxY(rectArray[0]) + halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rectArray[0]) + halfLineWidth, CGRectGetMinY(rectArray[0]) + halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rectArray[0]) - halfLineWidth, CGRectGetMinY(rectArray[0]) + halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rectArray[0]) - halfLineWidth, CGRectGetMinY(rectArray[lastRect]) - halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rectArray[lastRect]) - halfLineWidth, CGRectGetMinY(rectArray[lastRect]) - halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rectArray[lastRect]) - halfLineWidth, CGRectGetMaxY(rectArray[lastRect]) - halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rectArray[lastRect]) + halfLineWidth, CGRectGetMaxY(rectArray[lastRect]) - halfLineWidth);
CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rectArray[lastRect]) + halfLineWidth, CGRectGetMaxY(rectArray[0]) + halfLineWidth);
CGPathCloseSubpath(path);
}
[color set]; // set fill and stroke color
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, halfLineWidth * 2.);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
CGContextAddPath(ctx, path);
CGPathRelease(path);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
@end
- (void)updateHeaderWithText:(NSString*) text {
// setup text handling
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:text];
// use our subclass of NSLayoutManager
MyLayoutManager *textLayout = [[MyLayoutManager alloc] init];
[textStorage addLayoutManager:textLayout];
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:self.view.bounds.size];
[textLayout addTextContainer:textContainer];
UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width, 30.0) textContainer:textContainer];
self.navigationItem.titleView = textView;
// set some background color to our text
NSInteger rangeInitPlace = 0;
for (NSString *word in self.namesArray) {
if (![word isEqualToString:@" , "]) {
[textView.textStorage setAttributes:[NSDictionary dictionaryWithObject:[UIColor lightGrayColor] forKey:NSBackgroundColorAttributeName] range:NSMakeRange(rangeInitPlace, word.length)];
}
rangeInitPlace += word.length;
}
textView.delegate = self;
[textView becomeFirstResponder];
textView.selectedRange = NSMakeRange([textView.text length], 0);
}
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSRange selectedRange = textView.selectedRange;
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:selectedRange.location];
UITextPosition *end = [textView positionFromPosition:start offset:selectedRange.length];
UITextRange* textRange = [textView.tokenizer rangeEnclosingPosition:end withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionLeft];
NSLog(@"Word that is currently being edited is : %@", [textView textInRange:textRange]);
NSDictionary *normalAttrdict = [NSDictionary dictionaryWithObject:[UIColor brownColor] forKey:NSForegroundColorAttributeName];
textView.typingAttributes = normalAttrdict;
return YES;
}
【讨论】:
【讨论】:
试试zftokenfield,你可以根据自己的需求改变这个组件的UI
【讨论】: