Я сделал некоторые изменения для решения, предоставленного Madhup.
Решение от Madhup отлично работает для коротких сообщений, однако
если сообщение слишком длинное, оно будет покрыто изображением.
Следовательно, я добавил следующие шаги в методе UIAlertViewDelegate
- (void) willPresentAlertView: (UIAlertView *) alertView
Добавьте 8 "\ n" в качестве префикса сообщения, чтобы отправить сообщение вниз,
зарезервировать место для изображения (мое изображение было ограничено в 100x150)
Обнаружение подпредставлений AlertView, чтобы выяснить, существует ли UITextView.
UITextView будет существовать, только если сообщение слишком длинное.
Если UITextView не существует, все будет хорошо, изображение
показывается хорошо, сообщение показывается хорошо.
Если UITextView существует, удалите префикс 8 "\ n" из UITextView.text,
и затем вызовите UITextView.setFrame, чтобы изменить размер и изменить положение UITextview.
Вышеуказанное действие отлично работает.
Я отправляю NSDictionary в качестве сообщения для отображения, словарь содержит 2 пары ключ-значение, «msg» => строка реального сообщения. "url" => как изображение с веб-сайта.
С помощью метода sendSynchronousRequest NSURLConnection код будет извлекать данные изображения из Интернета в пути.
- (void)showAlertView:(NSDictionary *)msgDic {
NSLog(@"msgDic = %@", msgDic);
NSMutableString *msg = [[NSMutableString alloc] initWithString:@"\n\n\n\n\n\n\n\n"];
if ([msgDic objectForKey:@"msg"]) {
[msg appendFormat:@"%@", [msgDic objectForKey:@"msg"]];
}
else {
[msg setString:[msgDic objectForKey:@"msg"]];
}
NSLog(@"msg = %@", msg);
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Alert Title"
message:msg
delegate:self
cancelButtonTitle:@"Close" otherButtonTitles:nil];
if ([msgDic objectForKey:@"url"]) {
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[msgDic objectForKey:@"url"]]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
NSData *imgData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if (imgData) {
UIImage *shownImage = [UIImage imageWithData:imgData];
UIImageView *imgView = [[UIImageView alloc] initWithImage:shownImage];
[imgView setFrame:CGRectMake(floor(284-100)/2.0, 47, 100, 150)];
[alert addSubview:imgView];
[imgView release];
}
}
alert.delegate = self;
[alert show];
[alert release];
[msgDic release];
}
- (void)willPresentAlertView:(UIAlertView *)alertView {
int viewCount = [alertView.subviews count];
NSLog(@"subviews count = %i", viewCount);
if (viewCount > 0) {
BOOL bFoundTextView = NO;
for (int count=0; count<=[alertView.subviews count] -1; count++) {
BOOL bIsTextView = NO;
UIView *subView = [alertView.subviews objectAtIndex:count];
NSLog(@"view index %i classname = %@", count, [[subView class] description]);
bIsTextView = [[[subView class] description] isEqualToString:@"UIAlertTextView"];
bFoundTextView |= bIsTextView;
if (bIsTextView) {
UITextView *textView = (UITextView *)subView;
NSMutableString *msg = [[NSMutableString alloc] initWithString:textView.text];
[msg setString:[msg substringFromIndex:8]];
textView.text = msg;
CGRect frame = textView.frame;
if (frame.origin.y != 205) {
frame.origin.y = 205;
frame.size.height -= 155;
[textView setFrame:frame];
}
[msg release];
}
}
}
}