iphone – 在Mail.appThree20中重新创建收件人泡沫行为

iphone – 在Mail.appThree20中重新创建收件人泡沫行为,第1张

概述Krumelur asked this question关于如何创建一个类似于mail.app的收件人泡沫.请看下面我的意思截图: 我可以创建这个元素的外观(包括选择时的外观),但是当它是UITextField的一部分时,我正在努力获取行为.如何让泡沫作为UITextField文本的一部分?例如,当您按下退格按钮足够的时候,气泡将变为高亮显示,并且一次再按一次将被删除,就像它是文本的一部分一样.我 Krumelur asked this question关于如何创建一个类似于mail.app的收件人泡沫.请看下面我的意思截图:

我可以创建这个元素的外观(包括选择时的外观),但是当它是UITextFIEld的一部分时,我正在努力获取行为.如何让泡沫作为UITextFIEld文本的一部分?例如,当您按下退格按钮足够的时候,气泡将变为高亮显示,并且一次再按一次将被删除,就像它是文本的一部分一样.我也很难移动光标.

最好答案在Monotouch是很棒的,但Objective-C的答案也不胜感激.我不是要求确切的代码(虽然如果你愿意分享它,那么我不会说不!)D)而是如何实现这一点.

我知道Three20项目有一个类似的元素,但是我找不到代码中实际执行的位置.
对不起,如果这样做没有什么意义,我一直很努力地提出这个问题,请随时问我澄清问题的任何问题!

解决方法 我不喜欢Three20有尝试自定义事情的不良经验,修复分析器警告并使其在Xcode 4中构建.在新项目中再也不会使用它.但是在这种情况下可能会做你想要的.

但是,您可以简单地制作自己的气泡.我希望我可以信任我从这个博客那里得到的博客的作者,但是两年前,现在我无法找到它.基本上你正在挑选颜色,绘制圆形的封面,在它们之间放置一个矩形,然后将所需的文本放在顶部.

UIGraphicsBeginImageContext(CGSizeMake(SIDELENGTH,SIDELENGTH));CGContextRef context = UIGraphicsGetCurrentContext();// the image should have a white background[[UIcolor clearcolor] set];CGRect myRect = CGRectMake(0.0f,0.0f,SIDELENGTH,SIDELENGTH);UIRectFill(myRect);[self.color set];// Drawing codeCGSize textSize = [self.text sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]];double capDiameter = textSize.height;double capRadius = capDiameter / 2.0;double cappadding = capDiameter / 4.0;double textWIDth = MAX( capDiameter,textSize.wIDth ) ;CGRect textBounds = CGRectMake(cappadding,0.0,textWIDth,textSize.height);CGRect badgeBounds = CGRectMake(0.0,textWIDth + (2.0 * cappadding),textSize.height);double offsetX = (CGRectGetMaxX(myRect) - CGRectGetMaxX(badgeBounds)) / 2.0;double offsetY = (CGRectGetMaxY(myRect) - CGRectGetMaxY(badgeBounds)) / 2.0;badgeBounds = CGRectOffset(badgeBounds,offsetX,offsetY);textBounds = CGRectOffset(textBounds,offsetY);CGContextFillEllipseInRect(context,CGRectMake(badgeBounds.origin.x,badgeBounds.origin.y,capDiameter,capDiameter));CGContextFillEllipseInRect(context,CGRectMake(badgeBounds.origin.x + badgeBounds.size.wIDth - capDiameter,capDiameter));CGContextFillRect(context,CGRectMake(badgeBounds.origin.x + capRadius,badgeBounds.size.wIDth - capDiameter,capDiameter));if(self.textcolor != nil) {    const CGfloat* colors = CGcolorGetComponents(self.textcolor.CGcolor);    CGcolorSpaceRef space = CGcolorGetcolorSpace(self.textcolor.CGcolor);    CGcolorSpaceModel model = CGcolorSpaceGetModel(space);    if(model == kCGcolorSpaceModelMonoChrome)        // monoChrome color space has one grayscale value and one Alpha        CGContextSetRGBFillcolor(context,*(colors + 0),*(colors + 1));    else        // else a R,G,B,A scheme is assumed.        CGContextSetRGBFillcolor(context,*(colors + 1),*(colors + 2),*(colors + 3));} else     // else use plain white    CGContextSetRGBFillcolor(context,1.0f,1.0f);[self.text drawInRect:textBounds  withFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]  lineBreakMode:UIlineBreakModeClip alignment:UITextAlignmentCenter];UIImage* image = UIGraphicsGetimageFromCurrentimageContext();UIGraphicsEndImageContext();return image;

您描述的删除按钮行为也非常简单 – 一旦您选择并接受匹配,就会在插入点处绘制气泡,并将UITextFIEld的框架更改为在气泡后开始.如果你在UITextFIEld框架的开头,并且你得到另一个删除,删除泡沫UIImageVIEw,将UITextFIEld框架重置为UIImageVIEw开始使用的位置.

或者您可以使用UIWebVIEw作为地址输入字段,您可以在其中显示使用随文本显示的代码创建的气泡图像(参见this StackOverflow question).您只需要为代理方法shouldChangeCharactersInRange编写一个处理程序来处理删除添加的地址,如果气泡是删除 *** 作所针对的项目,则会显示气泡图像.

总结

以上是内存溢出为你收集整理的iphone – 在Mail.app / Three20中重新创建收件人泡沫行为全部内容,希望文章能够帮你解决iphone – 在Mail.app / Three20中重新创建收件人泡沫行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存