gpt4 book ai didi

ios - UITextField 圆角文本

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:55 25 4
gpt4 key购买 nike

有什么方法可以添加一个圆角和灰色背景色的字符串数组。但最后一个字符串在我的 UITextField 上没有这些属性,仅使用属性文本? Reference picture for my UITextField

最佳答案

我必须将 UITextField 更改为 UITextView,然后使用 How to set NSString's background cornerRadius on iOS7 中的解决方案我使用 UITextView 委托(delegate)做了一些调整。

@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;
}

关于ios - UITextField 圆角文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39957736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com