How to disable UITextField editing but still accept touch?

后端 未结 15 2294
误落风尘
误落风尘 2020-11-29 19:55

I\'m making a UITextField that has a UIPickerView as inputView. Its all good, except that I can edit by copy, paste, cut and select te

相关标签:
15条回答
  • 2020-11-29 20:23

    In Swift:

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        questionField.resignFirstResponder();
        // Additional code here
        return false
    }
    
    0 讨论(0)
  • 2020-11-29 20:25

    To prevent editing of UITextField while using UIPickerView for selecting values(in Swift):

    self.txtTransDate = self.makeTextField(self.transDate, placeHolder: "Specify Date")
    self.txtTransDate?.addTarget(self, action: "txtTransDateEditing:", forControlEvents: UIControlEvents.EditingDidBegin)
    
    func makeTextField(text: String?, placeHolder: String) -> UITextField {
        var textField = UITextField(frame: CGRect(x: 140, y: 0, width: 220.00, height: 40.00));
        textField.placeholder = placeHolder
        textField.text = text
        textField.borderStyle = UITextBorderStyle.Line
        textField.secureTextEntry = false;
        textField.delegate = self
        return textField
    }
    
    
    func txtTransDateEditing(sender: UITextField) {
        var datePickerView:UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.Date
        sender.inputView = datePickerView
        datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
    }
    
    func datePickerValueChanged(sender: UIDatePicker) {
        var dateformatter = NSDateFormatter()
        dateformatter.dateStyle = NSDateFormatterStyle.MediumStyle
        self.txtTransDate!.text = dateformatter.stringFromDate(sender.date)
    }
    
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool  {
        self.resignFirstResponder()
        return false
    }
    
    0 讨论(0)
  • 2020-11-29 20:25

    This workaround works. Put a transparent UIView above the text field and implement the following code:

    - (void)viewDidLoad
    {
     [super viewDidLoad];
    
       UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc]             initWithTarget:self action:@selector(longPress)];
    [transparentView addGestureRecognizer:press];
     [press release];
      press = nil;
    }
    
    -(void)longPress
    {
       txtField.userInteractionEnabled = NO;
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
       txtField.userInteractionEnabled = YES;
    }
    
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
      [txtField becomeFirstResponder];
    }
    
    0 讨论(0)
提交回复
热议问题