【问题标题】:A word-wrapping text field with an image background on the iPhone?iPhone上带有图像背景的自动换行文本字段?
【发布时间】:2010-11-16 01:03:09
【问题描述】:

有谁知道如何创建一个具有 UIImage 背景并进行自动换行的文本字段?

似乎 UITextField 上没有自动换行,而 UITextView 上没有背景图像!此外,它应该改变控件的大小,或者至少提醒行数发生了变化,以便委托可以改变它的大小..

此类控制的一个示例是 SMS 应用程序中的消息输入字段。

编辑:代码还应该让文本字段始终显示正在编辑的文本。显然,当 UITextView 在编辑时更改大小时,它会以某种方式失去对当前文本的关注。

先谢谢了! Aviad。

【问题讨论】:

    标签: iphone iphone-sdk-3.0 uikit


    【解决方案1】:

    UITextField 不支持自动换行,因为 UITextField 只支持单行文本。

    使用 UITextView。使 textView.backgroundColor = [UIColor clearColor]。首先添加 UIImage,然后在其上添加 UITextView。确保尺寸正确,应该没问题。

    至于改变 UITextView 的大小,在你的 UITextViewDelegate 中,做这样的事情:

    - (void)textViewDidChange:(UITextView *)textView
    {
        NSString *s = textView.text;
        CGSize testSize = CGSizeMake(textView.frame.size.width, NSIntegerMax);
        CGSize neededSize = [s sizeWithFont: textView.font constrainedToSize: testSize     lineBreakMode: UILineBreakModeWordWrap]; // or UILineBreakModeCharacterWrap?
    
        if (neededSize.height > testSize.height)
        {
            // grow textView
            textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, neededSize.width, neededSize.height);
    
            // then adjust the image size -- something like this
            imageView.frame = textView.frame 
        }
    
    }
    

    【讨论】:

    • 正如我所说,我想要一种类似于 iPhone 附带的 SMS 应用程序中的行为。当文本需要换行时,整个组件需要增长(包括图片,大概使用了UIImage的stretchableImage消息)。
    • 代码有点奇怪。首先,没有“textSize”,但您可能指的是“testSize”。其次,也是最奇怪的,是“neededSize.height > testSize.height”,它总是返回 false,因为 testSize 的高度是 NSIntegerMax(之前初始化了两行并且从未改变过......)我错过了什么吗?
    • 我确实明白了。我会试一试,看看它是如何工作的。
    • 是的,对不起,我很快就把它扔掉了。 Stack Overflow 上的编译器似乎没有捕捉到大多数语法错误......如果将约束设置为 max_int,我可能对 sizeWithFont 将返回的内容有误。不是我的最佳答案。
    • sizeWithFont 会好的,我很清楚这个消息。我现在不知道如何在事件发生时将所有其他视图“向上”移动。我可能必须包含特定 UIView 中的所有上部区域,然后更改其框架。还有其他想法吗?
    【解决方案2】:

    最终我编写了自己的代码,该代码在一定程度上适用于许多变通方法(例如,更改焦点,再次删除所有文本时调整大小等)。如果有人有兴趣,我会发布代码。

    在其他新闻中,就在今天,我在这里看到了一个不同的问题,叫做IFVerticallyExpandingTextField。名字很有希望,代码在这里,我来看看。任何有类似问题的人,你可能也想看看这个。

    我的错误,我没有仔细阅读它:IFVerticallyExpandingTextField 用于 Mac,而不是 iPhone。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多