it-swarm.com.ru

стал первым ответчиком, не работающим в iOS 8

Я использую метод UFestFesponder из UITextField, чтобы показать клавиатуру .... Это работает в iOS 7. Но в iOS 8 этот метод не показывает клавиатуру.

 UITextField *txtAddNew = [[UITextField alloc] initWithFrame:CGRectMake(10,10,240, 21)];
 txtAddNew.font = [UIFont fontWithName:@"Helvetica" size:16];
 txtAddNew.clearButtonMode = UITextFieldViewModeWhileEditing;
 txtAddNew.returnKeyType = UIReturnKeyDone;
 txtAddNew.delegate = self;
 txtAddNew.autocorrectionType = UITextAutocorrectionTypeNo;
 txtAddNew.tag = 15;

 // Open keyboard
 [txtAddNew becomeFirstResponder];

Есть ли способ сделать это в iOS 8?

17
Tejas Bharambe

Попробуйте позвонить становиться первым ответчиком как показано ниже

[txtAddNew performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0];

Согласно Apple,

Объект респондента становится первым респондентом, только если текущий Ответчик может отказаться от статуса первого ответчика (canResignFirstResponder) и новый респондент может стать первым респондентом.

Вы можете вызвать этот метод, чтобы сделать объект респондента, такой как представление первый ответчик. Однако вы должны вызывать его только в этом представлении, если оно является частью иерархии представления. Если свойство окна представления содержит Объект UIWindow, он был установлен в иерархии представлений; если оно возвращает ноль, представление отделено от любой иерархии.

42
thavasidurai

Swift 3

Вот Swift 3 версия принятого ответа. Чтобы заставить его работать, мне также пришлось добавить задержку.

txtAddNew.perform(
    #selector(becomeFirstResponder), 
    with: nil, 
    afterDelay: 0.1
)
12
Jacob Arvidsson

Я думаю, что вы пропустили addsubviewtxtAddNew к Mainview

   txtAddNew.tag = 15;
   [self.view addsubview:txtAddNew];  

   // Open keyboard
  [txtAddNew becomeFirstResponder];
3
Anbu.Karthik

Иногда это помогает сначала уйти в отставку первого респондента:

var tapGesture = UITapGestureRecognizer()
tapGesture.rac_gestureSignal().subscribeNext { [weak self] (_) -> Void in
    self?.inputTextField.resignFirstResponder()
    self?.inputTextField.becomeFirstResponder()
}

self.charViewsContainer.addGestureRecognizer(tapGesture)
1
Antoine

Для iOS 9.3 мне помогло следующее:

 private var searchTextFieldShouldReturn = false

    override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)

            self.searchTextFieldShouldReturn = false
            self.searchTextField.becomeFirstResponder()
        }
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        self.searchTextFieldShouldReturn = true
        self.searchTextField.resignFirstResponder()
    }

    func textFieldShouldReturn(textField: UITextField) -> Bool {
            self.searchTextFieldShouldReturn = true
            textField.resignFirstResponder()

            return true
        }

    func textFieldShouldEndEditing(textField: UITextField) -> Bool {

            return self.searchTextFieldShouldReturn
        }

Таким образом, вы должны убедиться, что вы также реализуете делегат textFieldShouldEndEditing.

0
Zoltan Varadi

добавьте эту строку в ваш код. я надеюсь, что это сработает 

[txtAddNew performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
0
Sport

На тот случай, если у других есть такая же проблема, как у меня:

У меня была IBOutlet, связанная с моей UITextField. Я ошибочно инициализировал это в своем методе viewDidLoad. То есть [[textField alloc] init];. Я удалил это, и все снова заработало. 

0
espitia

Swift 4 и iOS 11

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

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isKind(of: YOURTABLEVIEWCELL.self) {
        if let yourCell = cell as? YOURTABLEVIEWCELL{
            yourCell.yourUiTextField.becomeFirstResponder()
        }
    }
}

Надеюсь, что это поможет кому-то с такой же проблемой.

0
Derek Hierhohlzer