Как сделать доступным несколько пользовательских текстовых полей в iPhone SDK - PullRequest
0 голосов
/ 17 января 2012

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

textField1 = [[UITextField alloc] initWithFrame:CGRectMake(0, 270, 21, 21)];
textField1.placeholder = @"0";

textField1.delegate = self;
textField1.text = [numberofevent objectAtIndex:indexPath.row];

cell.accessoryView = textField1 ;
[self textFieldShouldReturn:textField1];
[textField1 addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingDidEnd];
[textField1 release];

И это для кода отставки клавиатуры

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField1 resignFirstResponder];
     return YES;
}

и последний для моего измененного значения текстового значения

- (void) textChanged:(UITextField *)source {
}

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

Ответы [ 2 ]

0 голосов
/ 17 января 2012

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

   - (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        UITableViewCell *cell   = [tableView_ dequeueReusableCellWithIdentifier:@"Cell"];
        if (!cell)
        {
            UITextField* textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 270, 21, 21)];
            textField.placeholder = @"0";
            textField.delegate = self;
            textField.text = [numberofevent objectAtIndex:indexPath.row];
            cell.accessoryView = textField;
        }
        // do something else here if the cell is reused
    }
0 голосов
/ 17 января 2012

Я думаю, что есть проблема, связанная с textField1.Во-первых, это, по-видимому, переменная экземпляра, потому что вы обращаетесь к ней по крайней мере из двух методов, но вы освобождаете ее в конце того, что я предполагаю, будет cellForRowAtIndexPath (ваш первый блок кода здесь), и после этой точки действительно не должнобольше не будет ссылаться на textField1 (даже если он сохраняется в ячейке).Поэтому я не думаю, что textField1 вообще должен быть иваром.Вторая проблема заключается в том, что вы всегда имеете в виду textField1 в textFieldShouldReturn:, а не textField.Кто знает, что будет означать textField1 к тому времени, когда вызывается textFieldShouldReturn:, но textField всегда будет ссылаться на любое текстовое поле, которое должно возвращаться.

Короче говоря, я думаю, вам нужно изменить это:

[textField1 resignFirstResponder];

на это:

[textField resignFirstResponder];

Я также не уверен, почему вы вызываете textFieldShouldReturn изнутри cellForRowAtIndexPath.Существует также другой метод UITextFieldDelegate, который вы, вероятно, должны использовать вместо добавления своего собственного действия / цели к текстовым полям.

Это может решить вашу главную проблему, если в остальном коде нет других проблем.

РЕДАКТИРОВАТЬ: Позвольте мне попытаться объяснить это еще более четко.У вас есть одно текстовое поле на строку.К тому времени, когда все ваши ячейки будут созданы в cellForRowAtIndexPath, textField1 ссылается только на самое последнее текстовое поле, которое было создано.Ваш textFieldShouldReturn метод всегда относится к textField1.Он должен ссылаться на свой аргумент textField, который соответствует фактическому текстовому полю, которое было первым ответчиком, когда был инициирован возврат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...