0

クリックボタンでアラートポップアップを開いていますが、コードは正常に機能しています

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PopUP Title" 
                                                message:@"This is pop up window/ Alert" 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];

UIImageView *tempImageView=[[UIImageView alloc]initWithFrame:CGRectMake(20,20,50,50)];
tempImageView.image=[UIImage imageNamed:@"abc.png"];

[alert addSubView:tempImageView]

[alert show];

[ OK ]ボタンをクリックするとアラートボックスが閉じます。ウィンドウ上の任意の場所をクリックすると、アラートボックスを閉じたいと思います。私を助けてください。

4

1 に答える 1

0

基本的にiOSで「トースト」を再作成しようとしているようです。朗報です。誰かがすでにそれを行っています。このプロジェクトを参照してください。

編集: iToast を使用したくありません。私はあなたのスタイルが好きです。コードが少ないです。これが私が思いついたものです。UIAlertViewのモーダルな性質を克服する唯一の方法は、タッチ イベントを処理するためのスーパービューを追加することであると他の人が言っているように、それは明らかです。ただし、毎回手動で行う必要はありません。サブクラス化を検討してくださいUIAlertView。次のようなことを試してください:

編集: @wagashi、私の答えを受け入れてくれてありがとう、そしてsetFrame:サイズを調整するのに適した場所であることについて頭を上げてくれてありがとう. あなたのコードは非常にトーストのような小さなアラートを出しますが、試してみると、メッセージが長すぎるとビューがバラバラに見えることがわかりました。そのsetFrame:ため、アラートのサイズをボタン 1 つ分のサイズに縮小し、画面の中央に配置するように変更しました。クラスが「iOS どこでもワンタップで UIAlertView を閉じるにはどうすればよいですか?」という質問のタイトルに正確に答えるようにします。

NoButtonAlertView.h

#import <UIKit/UIKit.h>
@interface _NoButtonAlertViewCover : UIView
@property (nonatomic,assign) UIAlertView *delegate;
@end
@interface NoButtonAlertView : UIAlertView
-(id)initWithTitle:(NSString *)title message:(NSString *)message;
@end

NoButtonAlertView.m

#import "NoButtonAlertView.h"
@implementation _NoButtonAlertViewCover
@synthesize delegate = _delegate;
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [self removeFromSuperview];
    [_delegate dismissWithClickedButtonIndex:0 animated:YES];
}
@end
@implementation NoButtonAlertView
-(void)show{
    [super show];
    _NoButtonAlertViewCover *cover = [[_NoButtonAlertViewCover alloc] initWithFrame:[UIScreen mainScreen].bounds];
    cover.userInteractionEnabled = YES;
    cover.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:.01];
    cover.delegate = self;
    [self.superview addSubview:cover];
}
-(id)initWithTitle:(NSString *)title message:(NSString *)message{
    if ((self = [super initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil])){
    }
    return self;
}
- (void)setFrame:(CGRect)rect {
    // Called multiple times, 4 of those times count, so to reduce height by 40
    rect.size.height -= 10;
    self.center = self.superview.center;
    [super setFrame:rect];
}
@end

この単純なUIAlertViewサブクラスとUIViewカバー用のサブクラスを使用すると、標準の と同じように簡単に使用できますUIAlertView。そのようです:

NoButtonAlertView *alert = [[NoButtonAlertView alloc] initWithTitle:@"Hello" message:@"I am the very model of a modern major general; I'm information, vegitable, animal, and mineral."];
[alert show];

生成されます:

カスタムアラートビュー

于 2013-04-05T14:38:27.857 に答える