получение значения uitextfield при нажатии клавиш?

<p>допустим, у меня есть следующий код:</p><pre><code>iboutlet uitextfield* nametextfield; iboutlet uilabel* greetinglabel; </code></pre><p>я бы хотел, чтобы <code>greetinglabel</code> прочитал "hello [nametextfield]", как только пользователь нажмет любую клавишу.</p><p>что мне в основном нужно, так это iphone-эквивалент метода делегата какао <code>controltextdidchange</code>.</p><p>метод делегата <code>textfield:shouldchangecharactersinrange:</code> вызывается при каждом нажатии клавиши:</p><pre><code>- (bool) textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string </code></pre><p>строковый аргумент возвращает символ, который был нажат. фактическое значение <code>textfield</code> (<code>nametextfield.text</code>) остается пустым.</p><p>что мне здесь не хватает? (мне бы хотелось, чтобы <code>nametextfield</code> отражала точную строку, которую пользователь ввел до сих пор).</p>

<p>оказывается, самый простой способ сделать это - использовать interface builder:</p><ul> <li>добавьте ibaction (к viewcontroller, скажем, как в этом случае)</li> <li>нажмите ctrl (или щелкните правой кнопкой мыши) на uitextfield в интерфейсном разработчике</li> <li>подключите событие "редактирование изменено" к ibaction владельца файла, добавленному на первом шаге.</li> </ul><p>работает как шарм :) (не могу поверить, что я потратил на это много дней, и теперь понимаю, что решение оказалось намного проще, чем я думал: p)</p>

<p>вы можете зарегистрировать действие для события uicontroleventeditingchanges в текстовом поле:</p><pre><code>[nametextfield addtarget:self action:@selector(updatelabelusingcontentsoftextfield:) forcontrolevents:uicontroleventeditingchanged]; </code></pre><p>...</p><pre><code>// todo: error checking - (void)updatelabelusingcontentsoftextfield:(id)sender { greetinglabel.text = [nsstring stringwithformat:@"hello %@", ((uitextfield *)sender).text]; } </code></pre>

<p><code>uitextfield</code> имеет уведомление <code>uitextfieldtextdidchange</code>, которое будет запускаться при каждом изменении текста, если вы зарегистрируетесь для него. просто зарегистрируйтесь для этого уведомления и в методе, вызванном уведомлением, измените текст метки.</p><p>чтобы добавить к этому, объект, переданный вашему обработчику уведомлений, будет иметь текст <code>uitextfield</code>.</p><p>надеюсь, это поможет.</p>