开发者

How to update UILabel that is a subview of inputView?

开发者 https://www.devze.com 2023-03-10 04:28 出处:网络
I have UITextView where user types a text. When the keyboard is shown, I add inputView with UIlabel on it. I want this UIlabel to hold character length of the text. It seems very easy task, but unfort

I have UITextView where user types a text. When the keyboard is shown, I add inputView with UIlabel on it. I want this UIlabel to hold character length of the text. It seems very easy task, but unfortunatelly it does not update t开发者_C百科his word counter UILabel when user change text..

this is how I load the inputView

_textView.inputView = [self inputAccessoryView];

in inputAccessoryView I simply add UILabel as a subview. When keyboard is show, UILabel is also show with inputView. I track changes on

- (void)textViewDidChange:(UITextView *)textView

unfortunatelly the UILabel is never updated (redrawn). When I log in to console its value, the value is correct, so its updating, but the UIlabel is never redrawn and holds the default value.

Can anyone help me with this?


did you

_textView.delegate = self;

?


I know it was 5 years ago, but it might help others, who like me stumble upon your question.

I use a UIToolbar as my inputAccessoryView (in my case it has a label, a flexible separator and a button). On textFieldEditingChanged event I rebuild part of the toolbar like this

@IBAction func textFieldEditingChanged(_ sender: UITextField) {

    //get a reference to the toolbar
    let toolBar = sender.inputAccessoryView as! UIToolbar

    //create a new label and set size + other properties
    toolbarLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 40, height: 22))
    toolbarLabel.text = mySpecificCalculatedString(sender.text!)
    toolbarLabel.font = defaultFont(17)
    toolbarLabel.adjustsFontSizeToFitWidth = true
    let width = toolbarLabel.textRect(forBounds: CGRect(x: 0, y: 0, width: maxWidthForLabel, height: 0), limitedToNumberOfLines: 1).size.width
    toolbarLabel.frame = CGRect(x: 0, y: 0, width: width, height: 22)
    toolbarLabel.textColor = .black
    toolbarLabel.tag = 666

    //rebuild the specific tolbar item
    let customView = UIBarButtonItem(customView: toolbarLabel)
    toolBar.items![0] = customView
}

Note: simply changing the text of the label did not work for me either, I had to reinitialize it.

Hope it helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号