#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. просто чтобы уточнить, если я правильно это читаю, то это работает благодаря наличию кнопки, которая выполняет набор. это не то, о чем я спрашивал. » есть ли способ, чтобы часть текста, которая … »