Добавить пользовательский ввод текста в аннотацию карты - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть простое приложение, которое позволит пользователю пометить местоположение. 2 кнопки в приложении 1 для очистки тегов и 1 для определения местоположения тегов.

У меня работает UIAlertview со встроенным UITextfield. Мне нужно взять пользовательский ввод из UITextfield и применить его к аннотации на карте. Код кнопки моего тега ниже

- (void) tag
{
MapAnnotation *annotation = [[MapAnnotation alloc] initWithCoordinate:current.coordinate];

NSString *locString = [NSString stringWithFormat:@"%f, %f", current.coordinate.latitude, current.coordinate.longitude];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeStyle = NSDateFormatterLongStyle;
//insert UITextfield
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Name your Location" message:nil delegate:self cancelButtonTitle:@"Continue" otherButtonTitles: nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeDefault;
alertTextField.placeholder = @"Enter title of your tag";

[alert  show];
// I have tried numerous variations of NSString below
//NSString *pintitle = NSLog(@"%@", alertTextField.text);
annotation.title = pintitle; 
annotation.subtitle = locString;

[mapView addAnnotation:annotation];
}

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

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вам нужно перехватить ввод текстового поля, когда предупреждение отключено.Этот код предполагает, что вы сохраняете ссылку на новую или отредактированную аннотацию.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
   UITextField *textField = [alertView textFieldAtIndex:0];
   self.annotationBeingEdited.subtitle = textField.text;
}
0 голосов
/ 02 апреля 2012

Попробуйте удалить AlertView из кнопки тега, затем используйте modalView (см. Ниже), когда пользователь нажимает кнопку. Вам нужно отредактировать свой AlertView, чтобы добавить «OtherButtonTitles» и «.tag =», такие как:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Name your Location"
    message:@"Enter Location"
    delegate:self 
    cancelButtonTitle:@"Cancel"
    otherButtonTitles:@"Continue", nil];
alertView.tag = 800;

Я бы предложил сделать "pinTitle" переменной, которую вы можете передать функции тега (void)

Вот пример modalView (который автоматически вызывается), и он запускает ваш «(пустой) тег» (без предупреждения в нем) и проверяет, работает ли он.

#pragma mark alert box delegate methods and actions
- (void)modalView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{
    // the second button (1) was pressed
    if (buttonIndex == 1 && alertView.tag == 800) {
        //NSLog(@"modalView dismiss button %i", buttonIndex);
        // Now run the geolocation (void)tag
        [self tag];
    }
}

Кроме того, убедитесь, что вы также отпустили аннотацию, например:

MapAnnotation *annotation = [[[MapAnnotation alloc] initWithCoordinate:current.coordinate] autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...