iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
UIAlertViewについては、もっとカスタマイズできるようにして欲しいが、何故かあまり手をつけられていない。Blocks対応もまだなので、もしかしたら、何か大きな変更を考えているのかもしれない。
アラートで画像等を表示したくなった。そも最も簡単な方法が画像のビューを追加する方法だが、追加するだけだとアラート全体のサイズが変更されないので、追加した画像と、元々のボタンが重なる等、不具合が発生する。そこで、自分が追加した画像のサイズから、アラート全体とボタンの位置を調整する事になる。
- (IBAction)alertImage:(id)sender
{
/* 画像を用意 */
UIImage *image = [UIImage imageNamed:@"likeness.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(10.0, 80.0, 100.0, 100.0);
UIAlertView *alertView = [[UIAlertView alloc] init];
alertView.delegate = self;
alertView.title = @"Alert Image";
alertView.message = @"a likeness";
[alertView addSubview:imageView]; /* 画像を追加 */
[alertView addButtonWithTitle:@"NO"];
[alertView addButtonWithTitle:@"YES"];
alertView.cancelButtonIndex = 0;
[alertView show];
}
/* アラートのボタン押下に対応 */
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
DBGMSG(@"%s, buttonIndex(%d)", __func__, (int)buttonIndex);
}
/* アラートのサイズを調整する */
- (void)willPresentAlertView:(UIAlertView *)alertView
{
CGRect frame = alertView.frame;
frame.origin.y -= 50.0; /* 追加した分、縦軸の座標を調整 */
frame.size.height += 100.0; /* 追加した分、縦の長さを増やす */
alertView.frame = frame;
for (UIView* view in alertView.subviews) {
frame = view.frame;
if (frame.origin.y > 80) { /* 追加したビューより下 */
frame.origin.y += 100; /* 追加した分、縦軸の座標を調整 */
view.frame = frame;
}
}
}
上手く表示されたが、何度もテストして位置の調整が必要そうで、あまり、お勧めできるもので内容に思えるので、次回は違う方法を模索してみたい。