2013-12-23 3 views
0

Хорошо, так что я в настоящее время пытается сделать несколько UITextFields получить «тег» свойства в моем коде, и ей это:Назначение свойства тега в Objective-C?

- (IBAction)userDoneEditing:(id)sender 
{ 
    _userFirstNameEntry = UserFirstName.text; 
    _userLastNameEntry = UserLastName.text; 
    _emailEntry = UserEmail.text; 
    _userEntry = UserUser.text; 
    _userPasswordEntry = UserPassword.text; 

    UserFirstName.tag = 1; 
    UserLastName.tag = 2; 
    UserEmail.tag = 3; 
    UserUser.tag = 4; 
    UserPassword.tag = 5; 

    if(UserFirstName.tag == 1) 
    { 
     NSLog(@"textField *UserFirstName did end editing"); 

    } 
    else if(UserLastName.tag == 2) 
    { 
     NSLog(@"textField *UserLastName did end editing"); 
    } 
    else if(UserEmail.tag == 3) 
    { 
     NSLog(@"textField *UserEmail did end editing"); 
    } 
    else if(UserUser.tag == 4) 
    { 
     NSLog(@"textField *UserUser did end editing"); 
    } 
    else if(UserPassword.tag == 5) 
    { 
     NSLog(@"textField *UserPassword did end editing"); 
    } 

    [sender resignFirstResponder]; 
} 

Я использую раскадровку, и я также свойства тега установить внутри файла раскадровки, используя инспектор атрибутов, но в настоящее время утверждения внутри моей логики if даже не работают. Я просто пытаюсь установить 5 UITextFields для свойств тегов. Что я делаю неправильно?

ответ

1

Я вижу несколько проблем.

Если вы выкладываете свои текстовые поля в раскадровке и устанавливаете теги в раскадровке, нет смысла снова устанавливать теги в свой метод userDoneEditing:.

Кроме того, если вы хотите установить теги, вы обычно делаете это в методе инициализации (например, viewDidLoad), а не в методе действий, таком как userDoneEditing:.

Кроме того, в вашем коде указано (UITextField.tag == 2). Но UITextField (объект класса) не имеет свойства tag. Только экземпляры UITextField имеют свойство tag. Я думаю, вы хотели сказать в этом случае textField.tag.

Кроме того, у вас есть переменные экземпляра, связанные с текстовыми полями (UserFirstName, UserLastName и т. Д.). Вы связали их с текстовыми полями в раскадровке? Или инициализировать их каким-то другим способом? Если вы их каким-то образом не подключили, то они ноль, и попытки установить свои теги ничего не делают.

Кроме того, вы имеете в виду переменную textField, но это не аргумент или локальная переменная вашего метода. Вы имели в виду использовать sender?

Кроме того, если у вас есть переменные экземпляра, связанные с вашими текстовыми полями, вам не нужно использовать теги вообще. Было бы проще сравнить textField (или, возможно, sender) к каждому из переменных экземпляра, в свою очередь:

if (sender == UserFirstName) { 
    NSLog(@"UserFirstName did end editing"); 
} else if (sender == UserLastName) { 
    NSLog(@"UserLastName did end editing"); 
} else ... 
+0

Большое спасибо за ваши советы, я сделал изменение «textField.tag» в " (переменная экземпляра) .tag ", и у меня есть подключенные IBOutlets, ссылочные переменные. Я скажу, однако, что это очень не нужно, я должен полностью использовать отправителя. – Chisx

0

Что такое textField? Похоже, вам нужно что-то вроде этого, чтобы назначить отправителя текстовому полю:

- (IBAction)userDoneEditing:(id)sender 
{ 
    UITextField *textField = (UITextField *)sender; 
    //... 
} 
Смежные вопросы