HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 在Mail.app / Three20中重新创建收件人泡沫行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 code
CGSize 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 scheR_24_11845@e 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中重新创建收件人泡沫行为所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。