#iphone #uitableview
#iPhone #uitableview
Вопрос:
Я создал страницу входа, которая содержит имя пользователя и пароль. Я создал одну пользовательскую ячейку, и в ней есть одна метка и одно текстовое поле. И я создал одно сгруппированное табличное представление и использовал пользовательскую ячейку. На самом деле я успешно создал, но проблема в том, как я могу получить значения текстового поля для имени пользователя и пароля. Потому что я использовал только одно текстовое поле для обоих полей. Я не смог правильно получить значения текстового поля. Я всегда получаю последнее значение для обоих полей. Как я могу получить имя пользователя и правильно передать текстовые значения word?
Вот мой пример кода,
В пользовательской ячейке,
@interface CustomCell : UITableViewCell {
UILabel *userLbl;
UITextField *userTxt;
}
@property (nonatomic, retain) IBOutlet UILabel *userLbl;
@property (nonatomic, retain) IBOutlet UITextField *userTxt;
@end
В контроллере корневого представления,
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
for(id currentObjects in nibObjects)
{
if([currentObjects isKindOfClass:[CustomCell class]])
{
cell = (CustomCell *) currentObjects;
}
}
}
if (indexPath.section == 0) {
if(indexPath.row == 0)
{
[[cell userLbl] setText:@"User Name:"];
cell.userTxt.tag = 0;
//self.userName = [[cell userTxt] text];
}
if (indexPath.row == 1) {
[[cell userLbl] setText:@"Pass Word:"];
cell.userTxt.secureTextEntry = YES;
//self.passWord = [[cell userTxt] text];
cell.userTxt.tag = 1;
}
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// Configure the cell.
return cell;
}
-(IBAction) submitAction : (id) sender
{
self.userName = [[cell userTxt] text];
self.passWord = [[cell userTxt] text];
[cell.userTxt resignFirstResponder];
NSLog(@"The user Name is %@", self.userName);
NSLog(@"The password is %@", self.passWord);
//Doesn't work
/* UITextField *txtField = (UITextField*)[cell viewWithTag:0];
self.userName = [txtField text];
UITextField *txtField1 = (UITextField*)[cell viewWithTag:1];
self.passWord = [txtField1 text];
NSLog(@"The user Name is %@", self.userName);
NSLog(@"The password is %@", self.passWord);*/
}
Вот мой снимок экрана с изображением,
Пожалуйста, помогите мне.
Спасибо.
Ответ №1:
Вы могли бы использовать метод TextFields, если вы используете более одного текстового поля, поскольку метод TextFields, который возвращает только строку из текстового поля, которое отменяет firstResponder, и, таким образом, вы пропустите все остальные текстовые поля. Это то, что я использовал в своем недавнем проекте, когда у меня была форма, созданная с использованием tableview и textfields. Это на некоторое время озадачило меня.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
switch (textField.tag)
{
case 0:
userName = textField.text;
break;
case 1:
passWord = textField.text;
break;
}
return YES;
}
Ответ №2:
используйте тег для каждого текстового поля и вызова —
UITextField *txtField = (UITextField*)[cell viewWithTag:tag];
NSString *text = [txtField text];
а также 7KV7 прав, вы присваиваете один и тот же тег обоим текстовым полям.
Ответ №3:
Почему бы не сделать это элегантно? В вашем UITextFieldDelegate
методе сделайте это следующим образом:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
switch (textField.tag) {
case 0:
self.userName = textField.text;
break;
case 1:
self.passWord = textField.text;
break;
default:
break;
}
}
Таким образом, у вас уже есть данные, когда пользователь нажимает отправить. Просто мысль.
Ответ №4:
Я думаю, что есть какая-то проблема в том, как вы устанавливаете тег для текстовых полей. Я предполагаю, что у обоих одинаковые теги 1. Пожалуйста, посмотрите, поможет ли это изменение
Обновить
Кстати, как вы можете получить доступ к ячейке внутри метода submitAction
. Я думаю, что проще назначить текст в textfields
переменной экземпляра, скажем, username
и password
, и использовать это в вашем методе.
Комментарии:
1. Я не могу получить ваш обновленный ответ, поэтому, пожалуйста, объясните подробнее об этом. Спасибо.
2. Кстати, как вы можете получить доступ к ячейке в методе submitAction. Я думаю, что проще присвоить текст в текстовых полях переменной экземпляра, скажем, имени пользователя и паролю, и использовать это в вашем методе.
3. Спасибо за ваш быстрый ответ. Проблема в том, что я создал одно текстовое поле в пользовательской ячейке и оно используется в табличном представлении как для полей имени пользователя, так и для пароля. Если я установлю значения тега, он не сможет установить должным образом. -(IBAction) Отправка: (id) отправитель { UITextField txtField = (UITextField )[просмотр ячейки с тегом: 0]; NSString text = [текстовое поле txtField]; UITextField *txtField1 = (UITextField )[просмотр ячейки с тегом: 1]; NSString * text1 = [текстовое поле txtField1]; NSLog (@ «Имя пользователя — %@», текст); NSLog(@»Пароль — %@», текст1); }
4. Я не думаю, что вы можете получить
cell
с помощью этого метода. Сохраните текст в in ivar и используйте его в своем методе