iphone - 具有自定义 rightView 的 UITextField 中的宽度问题

标签 iphone xcode uitextfield

我有一个 UITextField (放置在 UITableViewCell 内),它有一个 UIButton 作为自定义 rightView:

    UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(10.0, 1.0, cell.bounds.size.width - 20.0, 31.0)] autorelease];
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.bounds = CGRectMake(0.0, 0.0, 27.0, 31.0); // Probably not needed, doesn't change anything
    button.frame = CGRectMake(0.0, 0.0, 27.0, 31.0);
    [button setImage:[UIImage imageNamed:@"27x31.png"] forState:UIControlStateNormal];
    textField.rightView = button;                                
    textField.rightViewMode = UITextFieldViewModeUnlessEditing;

当显示文本字段时,触摸不会按预期处理:

  • 如果我触摸按钮,它就会被触发。
  • 如果我触摸靠近按钮左边缘(但超出其边界)的区域,该按钮仍会被触发。
  • 如果我想编辑文本字段中的文本而不是触发按钮,我必须进一步向左触摸。

如果我将设备旋转到横向模式,情况会变得更糟。在这种情况下,仍然触发按钮的按钮左侧的区域更宽,并且该区域左侧有一个不执行任何操作的间隙 - 按钮不会被触发,文本也不会被编辑。在这种情况下,我必须向左移动相当远的距离才能编辑文本。

只有当字段中的当前文本很短时才会发生这种情况。如果文本填充文本字段,则触摸将按预期进行处理(触摸按钮左侧的任何位置都可以纵向和横向编辑文本)。

我尝试覆盖 textRectForBoundseditingRectForBoundsrightViewRectForBounds。我验证了它们被调用并返回正确的值,但它们不会改变任何东西(只要返回值是正确的)。

有什么想法吗?

最佳答案

我对 rightView 也有类似的问题,它似乎阻止了文本字段的一部分接受输入。我的 rightView 不是按钮,因此我只需将其 userInteractionEnabled 设置为 NO,文本字段就开始在整个区域再次接收触摸。

由于您有一个按钮作为右 View ,这可能没有多大帮助。但我们的示例之间的另一个相似之处是两个 rightView 的宽度都很小。也许 rightView 不喜欢宽度 < x。

关于iphone - 具有自定义 rightView 的 UITextField 中的宽度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100725/

相关文章:

iphone - UITableViewCell 帮助中的 UITextField

iphone - 如何获得警报信息?

android - 在 youtube channel 上获取带有所有上传视频的 id 的 XML

iphone - 在旋转时放置和移动 View (UIView)

iphone - Nsnotification 或委托(delegate)?

ios - Xcode UI 测试 - 如何在 WebView 中查找和点击()元素

ios - iPhone 未连接。连接 iPhone 后 Xcode 将继续

android - Phonegap child 浏览器问题

ios - 每次笔划更改用户文本字段输入并获取更改的消息

iphone - 异常 <UITextField>,应用程序崩溃