2013-02-13 2 views
0

У меня есть ViewController с добавленным сгруппированным табличным просмотром. Некоторые ячейки содержат текстовые поля. Я хотел бы переключить первого ответчика на следующее текстовое поле в списке ячеек, когда пользователь нажимает клавишу возврата. Однако я не могу заставить его работать, и я не могу определить, выбрана ли неправильная ячейка или выбрано неверное текстовое поле.переход на следующий UITextField в разных ячейках в группе TableView

Я настраиваю мой тег в cellForRowAtIndexPath со следующим ..

cell.tag = ((indexPath.section + 1) * 10) + indexPath.row; 

это создаст тег десятки место быть значение раздела и те места быть значением строки. то есть. Тег 11 является разделом 0 строки 1.

Вот код для моего textFieldShould Return

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 

[textField resignFirstResponder]; 

UITableViewCell *cell = (UITableViewCell *)textField.superview; 
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath]; 

if (indexPath.section == 0) 
{ 
    if (indexPath.row == 0) 
    { 
     [[cell viewWithTag:((indexPath.section + 1) * 10) + (indexPath.row + 1)] becomeFirstResponder]; 
    } 
    if (indexPath.row == 1) 
    { 
     [[cell viewWithTag:((indexPath.section + 2) * 10)] becomeFirstResponder]; 
    } 
} 
return YES; 
} 

одно замечания, в настоящее время приращения для нового тега HARDCODED, но я хотел бы быть в состоянии пойти к новому тегу без жесткого кодирования фактического значения каждый раз. Это возможно?

ответ

3

Если все ваши ячейки содержат 1 UITextField, я бы сказал, что вы можете подклассифицировать UITableViewCell и добавить свойство, которое ссылается на текстовое поле ячейки, like I did here.

Но вы сказали, что только некоторые из ваших ячеек содержат текстовое поле, поэтому другим вариантом будет создание массива указателей на UITextFields (я получил идею here). Затем пользователь, нажав Return, будет циклически перебирать их следующим образом:

- (BOOL) textFieldShouldReturn:(UITextField*)textField { 
    NSUInteger currentIndex = [arrayOfTextFields indexOfObject:textField] ; 
    if (currentIndex < arrayOfTextFields.count) { 
     UITextField* nextTextField = (UITextField*)arrayOfTextFields[currentIndex+1] ; 
     [nextTextField becomeFirstResponder] ; 
    } 
    else { 
     [textField resignFirstResponder] ; 
    } 
} 
+0

Я вижу, я попробую это и посмотрю, как это работает. – JMD

+0

Хорошо, этот метод правильно переключает фокус, однако я хочу, чтобы клавиатура ушла, когда фокус переключен. В настоящее время он остается на экране до тех пор, пока не будет достигнуто последнее текстовое поле. заставляя данные во всех текстовых полях, которые не нужны. – JMD

+0

Если вы хотите, чтобы клавиатура исчезла, когда пользователь отбросит Return, то единственное, что должен сделать ваш метод textFieldShouldReturn', это '[textField resignFirstResponder];'. Отвечает ли это на ваш вопрос? –

1

Установите тэг на свой текст.

yourTextField.tag = ((indexPath.section + 1) * 10) + indexPath.row; 
Смежные вопросы