2016-10-19 2 views
-1

Пытается перемещаться по текстовым полям в UITableView. Возможность навигации по текстовым полям на простом представлении, но не в том, как перемещаться, когда текстовые поля находятся в UITableView.Навигация по текстовым полям в UITableView swift

Ниже приведен код, пытался до сих пор:

func textFieldDidBeginEditing(textField: UITextField) 
{ 

    //textField.inputAccessoryView = numberToolbar 
    if(textField == txtConfirmPassword) 
    { 
     textField.returnKeyType = UIReturnKeyType.Done 
    } 
    else 
    { 
     textField.returnKeyType = UIReturnKeyType.Next 
    } 
} 

Пожалуйста, руководство спасибо.

Update:

func textFieldDidBeginEditing(textField: UITextField) 
{ 
    if(delegate != nil) 
    { 
     delegate?.performSelector(NSSelectorFromString("editingTextField")) 
    } 

    if(textField.tag == 3) 
    { 
     textField.returnKeyType = UIReturnKeyType.Done 
    } 
    else 
    { 
     textField.returnKeyType = UIReturnKeyType.Next 
    } 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool 
{ 
    if(delegate != nil) 
    { 
     delegate?.performSelector(NSSelectorFromString("editingDone")) 
    } 
    if(textField.tag == 3) 
    { 
     textField.resignFirstResponder() 
     delegate?.performSelector(NSSelectorFromString("editingDone")) 

    } 

    let nextTage=textField.tag+1 
    // Try to find next responder 
    let nextResponder=textField.superview?.viewWithTag(nextTage) as UIResponder! 

    if (nextResponder != nil){ 
     // Found next responder, so set it. 
     nextResponder?.becomeFirstResponder() 
    } 
    else 
    { 
     // Not found, so remove keyboard 
     textField.resignFirstResponder() 
    } 
    return true 
} 

ответ

0

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

Примечание: Swift 3.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // let's say that you are reading the date from an array... 
     return myArray.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell 

     // here you set the tag 
     cell.myTextfield?.tag = indexPath.row 

     // ... 

     return cell 
    } 


    func textFieldDidBeginEditing(textField: UITextField) { 
     // now, based on textField you can check (tag == myArray.count - 1 means it is the last) 
     textField.returnKeyType = (textField.tag == myArray.count - 1) ? .done : .next 
    } 

Надежда, что помогает.

+0

Вы можете разместить скор 2 –

+3

давай! не слишком ленив, чтобы изменить его на Swift 2 :) все, что вам нужно сделать, это изменить имена методов tableView dataSource, и это решит вашу проблему. –

2

Вот код для Swift 2.1

Здесь я взял SampleTableViewCell, который является пользовательской ячейки, в которой я создал TextField.

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

Вот код:

//UITableView Delegate 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! SampleTableViewCell 
    cell.txtFld.delegate = self; 
    cell.txtFld.tag = indexPath.row + 100 

    cell.selectionStyle = UITableViewCellSelectionStyle.Gray; 


    return cell; 
} 

UPDATE: Вот делегат TextField

//UITextField Delegate 

func textFieldDidBeginEditing(textField: UITextField) 
{ 

    //textField.inputAccessoryView = numberToolbar 
    if(textField.tag == 100) 
    { 
     textField.returnKeyType = UIReturnKeyType.Done 
    } 
    else 
    { 
     textField.returnKeyType = UIReturnKeyType.Next 
    } 
} 

Здесь я перейти к следующему текстовому полю, нажав кнопку возврата текстового поля.

// called when 'return' key pressed. return NO to ignore. 
func textFieldShouldReturn(textField: UITextField) -> Bool 
{ 
    textField.resignFirstResponder(); 

    if(textField.tag == 100) 
    { 
     let txtFld = self.tblList.viewWithTag(101); 
     txtFld?.becomeFirstResponder(); 
    } 

    return true; 
} 

Надеюсь, это поможет.

Счастливый кодирования ...

+0

Это не вызов делегатов текстового поля, реализованный делегат = self и выше также UITextFieldDelegate –

+0

Вы включили UITextFieldDelegate в контроллер вида? См., Что мы установили делегат в cellForRowAtIndex. Так что определенно надо позвонить. Я уже проверил это. Просто проверьте там и дайте мне знать – Janmenjaya

+0

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