我可以创建这个元素的外观(包括选择时的外观),但是当它是UITextFIEld的一部分时,我正在努力获取行为.如何让泡沫作为UITextFIEld文本的一部分?例如,当您按下退格按钮足够的时候,气泡将变为高亮显示,并且一次再按一次将被删除,就像它是文本的一部分一样.我也很难移动光标.
最好答案在Monotouch是很棒的,但Objective-C的答案也不胜感激.我不是要求确切的代码(虽然如果你愿意分享它,那么我不会说不!)D)而是如何实现这一点.
我知道Three20项目有一个类似的元素,但是我找不到代码中实际执行的位置.
对不起,如果这样做没有什么意义,我一直很努力地提出这个问题,请随时问我澄清问题的任何问题!
但是,您可以简单地制作自己的气泡.我希望我可以信任我从这个博客那里得到的博客的作者,但是两年前,现在我无法找到它.基本上你正在挑选颜色,绘制圆形的封面,在它们之间放置一个矩形,然后将所需的文本放在顶部.
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中重新创建收件人泡沫行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)