отображение набираемого номера телефона с текстом для UIAlertView

#iphone #ios4

#iPhone #ios4

Вопрос:

есть ли способ, чтобы частью текста, отображаемого в UIAlertView iphone, был номер телефона, который будет набран при нажатии? может быть, как-то использовать tel: ?

Ответ №1:

Если вы хотите внедрить dataDetectorType в текст вашего сообщения, нет встроенного способа сделать это. Единственный способ — создать подкласс UIAlertView и настроить метод инициализации следующим образом :

 - (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... {
    self = [super initWithTitle:title message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil];
    if (self) {
        CGRect alertFrame = [self frame];

        UITextView myTextView = [[UITextView alloc] initWithFrame:CGRectMake(alertFrame.origin.x   10, alertFrame.origin.y   44, 200, 44)];
        [myTextView setEditable:NO];
        [myTextView setBackgroundColor:[UIColor clearColor]];
        [myTextView setDataDetectorTypes:UIDataDetectorTypeAll];
        [myTextView setText:@"http://www.apple.com"]; // Use your original message string from init

        [self addSubview:myTextView];
        [myTextView release]
    }
    return self;
}
  

Я протестировал это прямо сейчас, и это работает, но вам нужно потратить немного, чтобы сделать его презентабельным: P

Возможно, использование способа, опубликованного Jhaliya, быстрее и понятнее.

Комментарии:

1. Это похоже на то, что я искал. но мне, вероятно, понадобится дополнительная помощь с этим, чтобы заставить его работать на меня. откуда вы взяли 44 и 200? ваш код добавляет другой UITextView к UIAlertView, верно? могу ли я использовать тот, который уже внутри, и каким-то образом вызвать setDataDetectorTypes для него?

2. Все статические значения, которые я использовал для настройки фрейма, являются произвольными, и вы можете преобразовать их в соответствии с вашим пользовательским представлением. Мой код делает именно то, что вы сказали. К сожалению, Apple не предоставляет нам код для какого-либо класса, поэтому я полагаю, что UIAlertView состоит из UIView внутри UILabel для заголовка и UILabel для сообщения плюс некоторых UIButtons. Допустим, вы могли бы получить доступ к этой UILabel, но не можете, этот класс не поддерживает setDataDetectorTypes. Итак, я подумал нарисовать простой UITextView поверх метки сообщения и использовать его для отображения сообщения. Вам нужно настроить его, чтобы сделать его презентабельным

Ответ №2:

Да, это возможно, установив делегат ( UIAlertViewDelegate ) вашего UIAlertView. Прочитайте сообщение и заголовок из вашего UIAlertView, используя приведенные ниже свойства.

 @property(nonatomic, copy) NSString *message
@property(nonatomic, copy) NSString *title
  

Вам необходимо реализовать метод delegte, чтобы получить информацию, для какой кнопки нажата.

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  

вы также можете перейти по ссылке, чтобы получить индекс нажатых кнопок, и набрать номер телефона, используя tel: .


Итак, ваш код может быть примерно таким, как показано ниже.

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //Access `title` and `message` of your **UIAlertView**
    NSString* alertTitle = alertView.title;
    NSString* alertMessage = alertView.message;
    // Formatted the phone number and assign it to a string.
    NSString* myFormattedPhNumber = /*Use StringWithFormat function of NSString */;
    if (buttonIndex == 0)
    {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:myFormattedPhNumber];
    }
}
  

Комментарии:

1. просто чтобы уточнить, если я правильно это читаю, то это работает благодаря наличию кнопки, которая выполняет набор. это не то, о чем я спрашивал. » есть ли способ, чтобы часть текста, которая … »