基本的に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];
生成されます: