Nano Hash - криптовалюты, майнинг, программирование

Программное добавление UITextField в раскрывающийся список

У меня есть табличное представление, управляемое UITableViewController. В этом классе UITableViewController я программно добавил UITextField к моему UINavigationItem, добавив эти строки в мой метод viewDidLoad:

CGRect passwordTextFieldFrame = CGRectMake(20.0f, 100.0f, 280.0f, 31.0f);
UITextField *passwordTextField = [[UITextField alloc] initWithFrame:passwordTextFieldFrame];
passwordTextField.placeholder = @"Password";
passwordTextField.backgroundColor = [UIColor whiteColor];
passwordTextField.textColor = [UIColor blackColor];
passwordTextField.font = [UIFont systemFontOfSize:14.0f];
passwordTextField.borderStyle = UITextBorderStyleRoundedRect;
passwordTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
passwordTextField.returnKeyType = UIReturnKeyDone;
passwordTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
passwordTextField.tag = 2;
passwordTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
passwordTextField.delegate = self; // ADD THIS LINE
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:passwordTextField];

UITextField правильно отображается на моей панели навигации, но когда я нажимаю на нее, textFieldDidBeginEditing никогда не срабатывает.

Я добавил в свой заголовочный файл вместе с методом textFieldDidBeginEditing.

Я попытался сделать то же самое в представлении, контролируемом UIViewController, и здесь textFieldDidBeginEditing срабатывает, когда я нажимаю «текстовое поле». Поэтому я подозреваю, что проблема заключается в том, что я добавляю текстовое поле в UITableViewController.

Вы можете подумать, почему вместо этого вы не добавили «uinavigationbutton» в «NavigationBar», но я не могу, поскольку uidropdownmenu, которое я хочу вызвать при нажатии кнопки, принимает только «UITextField».


Ответы:


1

Попробуйте добавить еще одну строку:

[passwordTextField becomeFirstResponder];
03.11.2012
  • Спасибо за ответ, но моя точка останова не срабатывает внутри textFieldDidBeginEditing, когда я нажимаю текстовое поле 03.11.2012
  • Контроллер родительского представления должен реализовать этот делегат: UITextFieldDelegate — попробуйте реализовать его под своим включающим контроллером представления. Если это не сработает, вам, вероятно, потребуется реализовать его на панели навигации. И чтобы это работало, вам нужно будет реализовать категорию для UINavigationbar, которая реализует этот протокол. Как здесь: developer.apple.com/library/ios/#samplecode/SimpleFTPSample/ 03.11.2012
  • Я склонен полагать, что класс, который у вас есть passwordTextField, должен реализовать UITextFieldDelegate, и он будет работать. Нравится @interface YourClass() ‹UITextFieldDelegate, ANY_OTHER_DELEGATES›. Я очень думаю, что это будет ваш контроллер, производный от UITableViewController. 03.11.2012
  • Спасибо за ответ — я уже добавил протокол UITextFieldDelegate в свой класс — вот так: @interface LMResultsTableViewController : UITableViewController ‹UITextFieldDelegate› 03.11.2012
  • Я также пытался добавить UITextFieldDelegate в класс .m — вот так: @interface LMResultsTableViewController () ‹UITextFieldDelegate› Но все равно не повезло 03.11.2012
  • Тогда это должна быть одна из категорий UINavigationbar или UINavigationController (полученная вами), которая, я думаю, должна будет реализовать этот протокол UITextFieldDelegate. 03.11.2012
  • Хорошо, можете ли вы объяснить это решение немного подробнее. У меня есть представление uinavigation в раскадровке. Нужно ли мне добавить контроллер для этого представления, а затем добавить протокол UITextFieldDelegate в этот класс контроллера? 03.11.2012
  • Я попробовал это на своей коробке, и это сработало для меня. Я шаг за шагом публиковал в блоге: iphonegamezone.wordpress.com/2012/11/05/, если вы все еще не поняли, я поместил весь пример кода в конец этого поста - в папку dropbox. Дайте мне знать, если что вы наблюдаете. 05.11.2012
  • У вас была возможность попробовать? 07.11.2012
  • Это сработало - спасибо - я, наконец, заставил его работать, просто поймав делегата в моем контроллере таблицы. Спасибо за вашу помощь 08.11.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..