gpt4 book ai didi

iOS 如何在任何地方一键关闭 UIAlertView?

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:27 24 4
gpt4 key购买 nike

我想一键关闭 UIAlertView 之外的任何地方。我想显示一个没有任何按钮的 UIAlertView。

我这里有标准的 UIAlertView 代码,但如果可能的话,我需要输入如何关闭它。

用 UITouch?使用 UITapGestureRecognizer?

谢谢。


编辑:

在viewDidLoad中

此处使用名称“alert”初始化 alertview

     if (alert)
{
emptyview = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,480)];
emptyview.backgroundColor = [UIColor clearColor];
[self.view addSubview:emptyview];
[emptyview addSubview:alert];
NSLog (@"emptyview is there!");

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[emptyview addGestureRecognizer:singleTap];
[singleTap release];
}

但是这个 emptyview 根本不响应,它不响应 handleSingleTap 选择器,我重写了一下:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
[alert dismissWithClickedButtonIndex:0 animated:YES];
[emptyview removeFromSuperview];
}

我需要这个空 View 在显示警报时处于警报状态,然后我可以一键关闭警报。

我试过:

     if (alert)
{
emptyview = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,480)];
emptyview.backgroundColor = [UIColor clearColor];
[self.view addSubview:emptyview];
[emptyview addSubview:alert];
NSLog (@"emptyview is there!");

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[alert addGestureRecognizer:singleTap];
[singleTap release];
}

当然,alert 确实响应了 handleSingleTap 函数。我对 emptyview 做错了什么?


第二次编辑:

在这种情况下,我想要实现的是在选择一个词后显示一个带有解释的小 View ,如果你有 Kindle 应用程序中的类似功能。也许我应该创建一个 UIView 而不是 UIAlertView?但是kindle app里面的小view这么好看,下面还有阴影,这怎么可能?

最佳答案

听起来您实际上是在尝试在 iOS 上重新创建“Toast”。好消息,已经有人这样做了。 See this project.

编辑:不想使用 iToast。我喜欢你的风格,代码更少。这是我想出的。正如其他人所说,克服 UIAlertView 的模态性质的唯一方法是添加一个 super View 来处理触摸事件,这似乎很明显。但您不必每次都手动执行此操作,请考虑子类化 UIAlertView。尝试这样的事情:

编辑: @wagashi,感谢您接受我的回答,并感谢您提请注意 setFrame: 是调整大小的好地方。您的代码确实发出了一个非常类似 toast 的小警报,但是当我尝试它时,我发现如果消息太长, View 似乎会崩溃。因此,我修改了 setFrame: 以将警报的大小简单地减少一个按钮的大小,并保持在屏幕中心。以便类(class)准确回答问题标题“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];

将产生:

Custom AlertView

关于iOS 如何在任何地方一键关闭 UIAlertView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com