Как я скажу своему UITextField (коду) уйти в отставку первым респондентом? - PullRequest
1 голос
/ 20 сентября 2011

Я создал свой UITextField с помощью кода без InterfaceBuilder. Я хочу, чтобы клавиатура исчезала при нажатии кнопки «Готово». Как код узнает, что я ссылаюсь на UITextField, а нет на другой


Во-первых, большое спасибо.

Мой код такой:

-(void)viewDidLoad {
    [super viewDidLoad];
    field = [[UITextField alloc] initWithFrame:CGRectMake(30, 100, 185, 30)];
    field.adjustsFontSizeToFitWidth = YES;
    field.textColor = [UIColor blackColor];
    field.placeholder = @"Text";
    field.keyboardType = UIKeyboardTypeDefault;
    field.returnKeyType = UIReturnKeyDone;
    field.backgroundColor = [UIColor blueColor];
    field.delegate = self;
    [self.view addSubview:field];
} 

......

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

}

С этим кодом я нажимаю кнопку Готово, и ничего не происходит. Это так, как вы говорите?

Edit:

Я создал два UITextField, как я делал с предыдущим. Но теперь для каждого ряда я делаю так:

 if ([indexPath row] == 0) {
     [cell.contentView addSubview:pTextField];
 }
 else {
     [cell.contentView addSubview:pTextField];
 }

Таким образом, с этим кодом программа получила сигнал "EXC_BAD_ACCESS". Есть идеи, почему так происходит?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Как код узнает, что я ссылаюсь на UITextField, а нет на другой

Параметр textField вашего textFieldShouldReturn: метода всегда будет текстовым полем, которое в данный моментactive.

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

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

Обратите внимание, что в настоящее время вы также теряете память при добавлении текстового поля.Вы должны установить его как свойство в соответствии с ответом WrightCS, чтобы вы могли обратиться к нему позже.Итак, в конце вашего viewDidLoad:

self.myTextField = field;
[field release];
0 голосов
/ 20 сентября 2011

Убедитесь, что вы установили delegate ваших программно созданных UITextField на self (контроллер представления, который создал объект) и реализовали соответствующий метод UITextFieldDelegate (я думаю, что это textFieldShouldReturn:) и вызвали этот метод resignFirstResponder в аргументе textField передается методу делегата (который будет вашим UITextField).

0 голосов
/ 20 сентября 2011

Определите текстовое поле в заголовке, затем вы можете использовать следующее:

.h

@interface MyeViewController : UIViewController <UITextFieldDelegate>
{
    UITextField * myTextField;
}
@end

.m

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [myTextField resignFirstResponder];

    /* textField here is referenced from 
       textFieldShouldReturn:(UITextField *)textField 
     */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...