войти с помощью UITableView - PullRequest
       15

войти с помощью UITableView

3 голосов
/ 21 февраля 2011

Как я могу создать логин для имени пользователя / пароля, как в приложении Skype? Я знаю, что это сгруппированное табличное представление ... но как я могу это сделать?

Я искал на сайте и нашел следующий код:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        UILabel *startDtLbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 80, 25)];
        if (indexPath.row == 0)
            startDtLbl.text = @"Username";
        else {
            startDtLbl.text = @"Password";
        }

        startDtLbl.backgroundColor = [UIColor clearColor];

        [cell.contentView addSubview:startDtLbl];

        UITextField *passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(100, 5, 200, 35)];
        passwordTF.delegate = self;
        if (indexPath.row == 0)
            passwordTF.tag = 0;
        else {
            passwordTF.tag = 1;
        }
        [cell.contentView addSubview:passwordTF];
    }
    return cell;
}

Когда я делаю:

NSString * username = [((UITextField*)[self.view viewWithTag:0]) text];
NSString * password = [((UITextField*)[self.view viewWithTag:1]) text];

это дает мне эту ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView text]: unrecognized selector sent to instance 0x6c3c600

Почему это?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

После того, как вы назначите свой контроллер представления в качестве делегата UITextField, вы можете получить доступ к значениям текстовых полей в различных точках, используя следующие методы делегата:

– textFieldShouldBeginEditing:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:

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

Предположим, ваше текстовое поле для входа имеет значение тега 1, а текстовое поле для вашего пароля имеетзначение тега 2, вы можете получить значения, используя метод делегата ниже:

- (void) textFieldDidEndEditing:(UITextField *)textField {
  switch (textField.tag) {
      case 1:
      loginString = textField.text;
      break;
      case 2:
      passwordString = textField.text;
      break;
      default:
      break;
   }
}

Вы также можете получить ссылки на соответствующую ячейку и indexPath в любом из указанных выше методов, используя:

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

И затем в ячейку с:

UITableViewCell *cell = (UITableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath];

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

Надеюсь, это имеет смысл.Ура, Rog

1 голос
/ 21 февраля 2011

Вы также должны установить:

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