【问题标题】:UITextView input into string, updated as one is typing and displayed into a UILabelUITextView 输入到字符串中,在输入时更新并显示到 UILabel
【发布时间】:2014-11-08 07:53:06
【问题描述】:

这就是我想用iOS 8 SDK 做的事情,需要帮助。这些步骤概述了我想要实现的过程。

  1. 有一个UITextView。用户输入他/她的搜索字词。
  2. 这些搜索词以字符串的形式分配。此字符串将搜索项合并到 URL 中。 这会随着用户输入而更新。
  3. 字符串显示在用户屏幕上的UILabel 中。 这会随着用户输入而更新。

在我的ViewController.h 中,我创建了UITextFieldUILabel 并将它们相应地链接到Main.storyboard

@property (weak, nonatomic) IBOutlet UITextField *keywords;
@property (weak, nonatomic) IBOutlet UILabel *link;

这是我不确定该怎么做的时候。应用程序必须检测文本输入何时更改以更改字符串并在标签中显示此更新的字符串。我曾尝试在我的ViewController.m 中使用此方法,但它无法正常工作。

[self.keywords addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

这就是我尝试将文本输入分配到字符串并在屏幕上显示的方式(在 viewDidLoad 中 - 我的意思是使用 NSStringNSMutableString

NSString *terms = [NSString stringWithFormat:@"http://myurl.com/?q=%@", self.keywords.text];
self.link.text = terms;

抱歉,如果这个问题很简单,我是 Objective C 的新手。感谢您的帮助。

【问题讨论】:

  • 你的目标方法被调用了吗?如果是,请尝试在文本更改时记录文本,看看它是什么。

标签: objective-c xcode ios8 uitextfield uilabel


【解决方案1】:

你可以将UITextField的delegate设置为self,然后像这样实现delegate方法。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
    if ([string length]) {
        self.theLabel.text = [NSString stringWithFormat:@"q=%@%@", textField.text,string];
    } else {
        self.theLabel.text = [self.theLabel.text substringToIndex:self.theLabel.text.length - 1];
    }
    return YES;
}

另一种方法是使用 NSNotification 观察文本变化。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLabelText:) name:UITextFieldTextDidChangeNotification object:nil];


- (void)changeLabelText:(id)sender
{
   self.theLabel.text = [NSString stringWithFormat:@"q=%@", self.textField.text];
}

【讨论】:

  • 这很好用,尽管当您手动删除所有输入的字符时存在问题,它会留下第一个字符。你知道为什么会这样吗?
  • 是因为该方法返回YES后textField的文本发生了变化,所以当你删除一个字符时,(NSString *)string是一个空字符串,应该是替换textField文本的最后一个字符。假设你有“abc”作为文本,你删除了一个期望“ab”的字符,但是在设置标签文本时,textField.text仍然是“abc”,字符串是“”,所以你仍然看到“abc”在标签。
  • 我明白了,有没有办法解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多