【问题标题】:iPhone: How can I make a UITextField invisible but still clickable?iPhone:如何使 UITextField 不可见但仍可点击?
【发布时间】:2011-10-13 03:07:30
【问题描述】:

我想做的事:

在一个简单的 UITableView 中,我有一个表单,其中包含可以编辑的文本和日期/时间。我也在日期/时间单元格中使用 UITextFields,以便可以使用 inputView 属性在键盘上显示 datePicker。

问题是什么:

问题在于这些 UITextFields 实际上只是在选择时显示 datePicker 的虚拟字段。当它们被选中时,它们会显示这个令人讨厌的闪烁蓝色光标 - 但这些只是虚拟文本字段,我根本不希望它们变得可见。

如果我设置 alpha = 0 或 hidden = YES,则 textField 不再是可点击的。

关于解决这个问题的任何想法 - 或者,我最初的问题的不同解决方案?谢谢

【问题讨论】:

  • 将 alpha 设置为 0.01 是否有效?
  • 为什么在键盘上显示 datePicker 作为 inputView?为什么不提供一个在隐藏键盘后启动选择器视图的按钮?
  • @Akshay 因为这不是我设计它的工作方式 - 我确切地知道我希望界面如何,并且通过隐藏键盘/单击额外按钮,它会让我漂亮的界面令人讨厌:)
  • 这并不是一个额外的按钮。我建议用按钮替换 UITextField 。但是,您可以尝试通过设置其背景颜色、边框颜色等,使 UITextField 看起来像它的背景一样,使其与背景合并并且不可见。
  • @chown 不,任何 0.02 及更高版本都可以 - Apple 决定不可见(或接近)的 UI 元素不应该是可点击的。不过,您仍然可以使用 0.02 看到它。

标签: iphone objective-c ios uitextfield


【解决方案1】:

我终于找到了解决办法。通过隐藏 UITextView,没有检测到触摸。但是,如果我覆盖一个自定义 UIButton(它可能是不可见的),那么我可以在通过触摸按钮时激活 UITextField

[myTextField becomeFirstResponder];

然后 datePicker 将按原样替换键盘。

【讨论】:

    【解决方案2】:

    我会使用UILabelUItapGestureRecognizer 来了解用户何时点击标签。

    仅当需要实际输入文本时才应使用文本字段控件。

    如果您在手势识别器方面需要更多帮助,请告诉我,它们非常易于使用,可以为您省去很多麻烦。

    【讨论】:

    • 使用 UITextField 的重点是它有一个 'inputView' 属性,解决了 UIKeyboard 隐藏 UIDatePicker 的问题。否则这就是我会做的。
    【解决方案3】:

    要使用文本字段的“inputView”属性,请将您的文本字段覆盖在标签之上。然后简单地隐藏和显示 textFieldDid* 方法中的文本字段,但在标签中显示实际显示值。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        ....
        [cell.contentView addSubview:myLabel];
        [cell.contentView addSubview:myTextField];
        ....
    }
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField
    {
        if (textField == self.myTextField) {
            [textField setHidden:YES];
        }
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField
    {
        if (textField == self.myTextField) {
            [textField setHidden:NO];
        }
    }
    
    - (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
        self.myLabel.text = @"Set value here";
    }
    

    【讨论】:

      【解决方案4】:

      在这里查看我的答案: Disable blinking cursor in a UITextField

      这将隐藏光标并让您选择是否向用户显示任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多