2011-02-13 70 views
3

我希望文本框內的文本在點擊時突出顯示。突出顯示文本框內的文本

我希望原始文本在有人點擊數字鍵的那一刻被刪除。我嘗試使用clearButtonMode,但後來由於我的文本字段大小非常小,十字圖標完全佔據了文本字段。

任何想法如何實現這一目標?

回答

6

這可以由

(void)textFieldDidBeginEditing:(UITextField *)iTextField { 
    [iTextField selectAll:self]; 
} 
1

您需要自己突出顯示。你可以嘗試:

  • 改變文本框(大,更大膽,不同的顏色)
  • 覆蓋在文本字段的頂部透明的UIView的字體。
  • 改變文本字段
  • 變化的邊框樣式

有很多選擇的背景...

編輯:在回答你的問題,以明確的領域只要編輯在你的文本字段會開始前值,您設置的對象,以符合UITextFieldDelegate協議,並實現這個方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    textField.text = nil; 
} 
+0

我希望原始文本在有人點擊數字鍵的那一刻被刪除。我嘗試使用clearButtonMode,但後來由於我的文本字段大小非常小,十字圖標完全佔據了文本字段。 – Abhinav 2011-02-13 19:11:06

+0

謝謝。但我不想在編輯模式下清除文本字段。爲此,有一個簡單的屬性「clearsOnBeginEditing」。我希望我的文本被突出顯示,以便如果有人點擊了數字鍵盤中的任何數字,它會做兩件事:1)刪除突出顯示的文本並2)放入新文本。但是,如果有人不採取行動並擺脫數字鍵盤,他仍然可以保留舊的價值。 – Abhinav 2011-02-13 19:20:38

1

並突出顯示文本字段的敲擊文字,最簡單的方式實現的僅僅是子類的UITextField,覆蓋becomeFirstResponder並在那裏選擇的所有文本。

0

如果全部選擇:並不總是在這裏工作是一個修復:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [textField performSelector:@selector(selectAll:) withObject:textField afterDelay:0.f]; 
} 
0

如果您仍然希望能夠在您使用其他委託功能視圖控制器,我建議你補充一點:

override weak var delegate: UITextFieldDelegate? { 
    didSet { 
     if delegate?.isKindOfClass(YourTextField) == false { 
      // Checks so YourTextField (self) doesn't set the textFieldDelegate when assigning self.delegate = self 
      textFieldDelegate = delegate 
      delegate = self 
     } 
    } 
} 

// This delegate will actually be your public delegate to the view controller which will be called in your overwritten functions 
private weak var textFieldDelegate: UITextFieldDelegate? 

class YourTextField: UITextField, UITextFieldDelegate { 

    init(){ 
     super.init(frame: CGRectZero) 
     self.delegate = self 
    } 

    func textFieldDidBeginEditing(textField: UITextField) { 
     textField.performSelector(Selector("selectAll:"), withObject: textField) 
     textFieldDelegate?.textFieldDidBeginEditing?(textField) 
    } 
} 

這樣你的視圖控制器不需要知道你已經覆蓋了委託,你可以在你的視圖控制器中實現UITextFieldDelegate函數。

let yourTextField = YourTextField() 
yourTextField.delegate = self