как отключить отображение клавиатуры при нажатии на текстовое поле ios?

<p>у меня есть текстовое поле, и мне нужно, когда пользователь нажимает его, чтобы показать пользовательский выбор.</p><p>средство выбора отображается нормально, но проблема в том, что клавиатура отображается снизу, а я этого не хочу.</p><p>это проект для ipad, который я пытаюсь преобразовать из своего iphone. на iphone это работает хорошо, а клавиатура всегда скрыта.</p><p>что я мог упустить/забыть сделать здесь?</p><h2>правка</h2><hr><p>для дальнейшего ознакомления то, что на самом деле здесь произошло, было то, что фактически оба раза (iphone & ipad) клавиатура была <strong>не</strong> скрыта. я просто подумал, что это было спрятано в iphone, потому что мой сборщик, который выскочил снизу, скрывал клавиатуру, как она была на нем. но на ipad это было не так.</p><p>в любом случае я исправил это, используя метод делегата, предложенный ниже.</p><p>осторожно, я принял этот ответ, потому что он отвечал <strong><em> конкретно </em></strong> то, что я хотел. остальные ответы верны, и я считаю, что лучше для других реализаций.</p>

<pre><code>-(bool)textfieldshouldbeginediting:(uitextfield *)textfield { // here you can do additional code or task instead of writing with keyboard return no; } </code></pre><p>этот метод делегата будет вызван первым, когда вы нажмете на текстовое поле, и если вы напишите no как логическое значение, это означает, что вы не хотите начинать редактирование, поэтому он не будет отображать keyboard.</p>

<pre><code>- (bool)textfieldshouldbeginediting:(uitextfield *)textfield { if(textfield == yourtextfield) { [textfield resignfirstresponder]; // show you custom picker here.... return no; } } </code></pre><p>и вам нужно реализовать <code>uitextfielddelegate</code> в контроллере.</p><p>и назначьте делегата для <code>yourtextfield</code>.</p>

<p>используйте текстовое поле делегата.</p><pre><code>-(bool)textfieldshouldbeginediting:(uitextfield *)textfield { return no; } </code></pre>

<p>похоже, что во всех этих ответах используется один подход: просто отрицать клавиатуру до ее появления. это предотвращает статус первого респондента, который имеет много преимуществ.</p><p>один простой подход, который позволяет вам поддерживать статус первого респондента, состоит в том, чтобы создать пустое представление и присвоить его свойству inputview в вашем поле ввода. если вы используете ios 9 (или более позднюю версию?), вам также придется избавиться от объектов inputassistantitem.</p><pre><code>uitextfield *field = [[uitextfield alloc] init]; field.inputview = self.emptykeyboard.view; uitextinputassistantitem *aitem = [field inputassistantitem]; aitem.leadingbarbuttongroups = @[]; aitem.trailingbarbuttongroups = @[]; </code></pre><p>затем, если вы хотите управлять полем из контроллера альтернативного представления, вы можете сделать это, добавив цели:</p><pre><code>[field addtarget:self.numberpad action:@selector(editingbegan:) forcontrolevents:uicontroleventeditingdidbegin]; [field addtarget:self.numberpad action:@selector(editingended:) forcontrolevents:uicontroleventeditingdidend]; [field addtarget:self.numberpad action:@selector(fieldchanged:) forcontrolevents:uicontroleventeditingchanged]; </code></pre><p>также возможно сделать это намного более аккуратно, создав подкласс uitextfield.</p>

<p>используйте делегата textfield,</p><pre><code>- (bool)textfieldshouldbeginediting:(uitextfield *)textfield { textfield=nil; return no; } </code></pre>

<p><strong>версия swift 3.</strong></p><p>сначала установите делегата для текстового поля</p><pre><code>self.textfield.delegate = self </code></pre><p>тогда в расширении</p><pre><code>extension viewcontroller: uitextfielddelegate { func textfieldshouldbeginediting(\_ textfield: uitextfield) -> bool { return false } } </code></pre>

<p><strong>swift 3/4</strong></p><ol> <li> <p>добавьте: - <strong>itextfielddelegate</strong> в своем классе.</p> </li> <li> <p>добавить: - <strong>self.textfield.delegate = self</strong> in viewdidload</p> </li> <li> <p>последний просто добавьте эту функцию -</p> <p>func textfieldshouldbeginediting (\_ textfield: uitextfield) -> bool {</p> <pre><code>return false </code></pre> <p>}</p> </li> </ol>

<pre><code>-(bool)textfieldshouldbeginediting:(uitextfield *)textfield { // here you can do for specific text field by if (textfield==(the text field you don't want to show keyboard)) { nslog(@"don't show keyboard"); return no; } else { return yes; } } </code></pre>