16

/ で を使用しているため、カーソル/UITextFieldキャレット/虫めがねを非表示にして、テキストの編集を防ぐにはどうすればよいですか?inputViewUIPickerViewUIDatePickerView

に設定userInteractionEnabledNOても機能しません。これは、タッチを受信しなくなり、キーボードが表示されなくなるためです。

4

6 に答える 6

18

サブクラス UITextField

//Disables caret
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return CGRectZero;
}

//Disables magnifying glass
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
    {
        gestureRecognizer.enabled = NO;
    }
    [super addGestureRecognizer:gestureRecognizer];
}

UITextFieldDelegate で

//Prevent text from being copied and pasted or edited with bluetooth keyboard.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return NO;
}

UIPickerView/UIDatePicker の結果からプログラムでテキストを設定するだけです。

于 2013-08-09T02:19:40.343 に答える
5

これがお役に立てば幸いです。

カーソル UIColor を設定 -> 空。UI では非表示になります。

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];
于 2013-08-17T14:31:48.763 に答える
1

相互作用なしでを持ち、UITextFieldそれでも で動作するにはinputView:

これらのメソッドを使用して UITextField をサブクラス化します。

// Hide the cursor
- (CGRect)caretRectForPosition:(UITextPosition*)position
{
    return CGRectZero;
}

// All touches inside will be ignored
// and intercepted by the superview
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    return NO;
}

最後の方法では、UITextField.

UITableViewCellこれは、たとえばテキストフィールドを使用している場合にうまく機能し、を介して firstResponder ステータスを切り替えることができますtableView:didSelectRowAtIndexPath:

于 2015-04-25T02:48:53.693 に答える
0

ファーストレスポンダーにする以外のテキストフィールドとのやり取りを無効にするには、テキストフィールドの真上に同じサイズの UIButton を配置するだけです。ボタン タップ イベントのコードは次のようになります。

- (IBAction)btnEditPhoneTapped:(id)sender
{
    if (self.tfClientPhoneNo.isFirstResponder == NO) [self.tfClientPhoneNo becomeFirstResponder];
}
于 2014-05-30T17:33:19.457 に答える