2016-03-16 6 views
0

Я пытаюсь сделать предупреждение о представлении ввода для текстового поля, так как у меня есть max. 3 варианта, и мой клиент хочет, чтобы он выглядел так.Предупреждение вместо клавиатуры для ввода в текстовое поле -> курсор остается в текстовом поле Swift2

В принципе нет проблем, я могу нажать на текстовое поле, в результате чего отображается предупреждение. После выбора значения в текстовом поле обновляется правильно, но затем курсор остается в текстовом поле (im, предполагая из-за крана, текстовое поле является первым ответчиком)

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

Я попытался следующие вещи на разных местах в коде:

resignFirstResponder() 
becomeFirstResponder() 

Кроме того, когда им в настоящее время редактирует другой текстовое поле с клавиатуры, им удалось показать уведомление, когда нажав на соответствующую TextField. это приводит к тому, что клавиатура закрывает предупреждение, так как им также не удается закрыть клавиатуру, когда это происходит.

Покушение против этого: (Записано в методах событий других TextFields

if (alertView != nil) { 
     alertView?.dismiss() 
    } //Not very professional, but still in development :) 

Вот некоторые важные фрагменты кода, чтобы понять, как я построил его:

Эта функция является EditingDidBegin Событие TextField

@IBAction func TextboxUnitEditing(sender: UITextField) { 
    //One try of preventing the cursor (not working) 
    tableView.endEditing(true) 

    ... 
    /* Unrelated Code here */ 
    ... 

    alertView = SwiftAlertView(...) 

      ... 
    /* Unrelated Code here */ 
    ... 

    alertView.show() 
} 

метод делегата чеку

func alertView(alertView: SwiftAlertView, clickedButtonAtIndex buttonIndex: Int) { 
    //buttonIndex == 1 means, cancel was tapped 
    if (buttonIndex == -1) { 
     currentCell = nil 
     tableView.endEditing(true) 
     return 
    } 

    ... 
    /* Change value in textfield */ 
} 

Так что мой вопрос: что не так? Что мне нужно вызвать, чтобы избавиться от курсора? Если вам нужно что-то еще знать, скажите, пожалуйста, и я могу предоставить дополнительную информацию.

Заранее спасибо.

EDIT:

Решено. Вместо того, чтобы:

self.tableView.endEditing(true) 

я должен был сделать это: не

dispatch_async(dispatch_get_main_queue(),{ 
     self.tableView.endEditing(true) 
    }) 
+0

Я немного потерял по этому вопросу; они печатают текст или нет. Если нет, и вы просто хотите сделать выбор из 3 вариантов, чем использовать alertController, вставьте какой-то код в ответ, так как здесь нет места. – user3069232

+0

Спасибо за совет, но не то, что им нужно. Тот факт, что я забыл сказать вам, это то, что я поддерживаю ios7. Поэтому нет AlertController. Но я был способен решить эту проблему самостоятельно, так как единственное, что мне нужно было сделать, это отправить инструкцию tableView.endEditing (true) в основную очередь. – glace

ответ

1

Вместо

self.tableView.endEditing(true) 

Это должно быть сделано в основном потоке

dispatch_async(dispatch_get_main_queue(),{ 
    self.tableView.endEditing(true) 
}) 

В противном случае эта строка будет пропущена

1

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

showInfo(message: error!.localizedDescription) 

Это расширение позади него.

protocol ShowsInfo {} 

extension ShowsInfo where Self: UIViewController { 
    func showInfo(title: String = "Info", message: String) { 
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil)) 
    dispatch_async(dispatch_get_main_queue()) { 
     self.presentViewController(alertController, animated: true, completion: nil) 
    } 
} 
} 
Смежные вопросы