在ios 7.0中,我只想在用户按下弹出窗口之外时关闭该操作表。我在按钮上显示该操作表单击并使用此代码尝试在actionsheet.window上获得一些轻击手势
-(IBAction)buttonClicked:(id)sender{
NSLog(@"button clicked");
NSLog(@"action sheet ");
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"Rename",@"Delete",@"Cancel" ,nil];
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setBackgroundColor:[UIColor whiteColor]];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateSelected];
}
}
// [actionSheet setBackgroundColor:[UIColor whiteColor]];
[actionSheet showInView:self.view];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
tap.cancelsTouchesInView = NO;
[actionSheet.window addGestureRecognizer:tap];
[actionSheet.window addGestureRecognizer:tap];
}
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"in tap out");
CGPoint p = [gestureRecognizer locationInView:actionSheet];
if (p.y < 0) {
NSLog(@" p.y < 0 ");
}
}
但是我没有得到这个轻拍手势。请帮我解决这个问题。
答案 0 :(得分:1)
嗨,这是我在外面点击时解除动作表的解决方案
首先创建一个视图来处理点击手势和操作表
@implementation MyClass
{
UIActionSheet *_myActionSheet;
UIView *_myTapView;
}
在动作表委托方法
上- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{
[_myTapView removeFromSuperview];
_myTapView = [[UIView alloc] initWithFrame:actionSheet.superview.bounds];
_myTapView.backgroundColor = [UIColor clearColor];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
tap.cancelsTouchesInView = NO;
[_myTapView addGestureRecognizer:tap];
[actionSheet.superview insertSubview:_myTapView belowSubview:actionSheet];
}
并处理点按手势
- (void)tapOut:(UIGestureRecognizer *)gestureRecognizer
{
//dismiss the action sheet here
[_myActionSheet dismissWithClickedButtonIndex:<index> animated:YES];
}
答案 1 :(得分:0)
此代码可帮助您解除操作表
[self dismissWithClickedButtonIndex:0 animated:YES];
按钮索引&#39; 0&#39;是取消按钮的按钮索引。
答案 2 :(得分:0)
您可以尝试在不同的actionSheet.window
上添加一个tapgesture。
请尝试在self.superView
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
tap.cancelsTouchesInView = NO;
[self.superview addGestureRecognizer:tap];
//OR
[actionSheet.superview addGestureRecognizer:tap];
像这样,你可以根据视图层次结构尝试不同的东西。
更新1
尝试继承Actionsheet并在类中定义tapgesture。
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
CGPoint p = [gestureRecognizer locationInView:self];
if (p.y < 0) { // They tapped outside
[self dismissWithClickedButtonIndex:0 animated:YES];
}
}
-(void) showInView:(UITabBar *)view {
[super showFromTabBar:view];
// Capture taps outside the bounds of this alert view
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
tap.cancelsTouchesInView = NO; // So that legit taps on the table bubble up to the tableview
[self.superview addGestureRecognizer:tap];
}
享受编码!!
答案 3 :(得分:0)
以下内容适用于UIActionSheet的子类
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Rename",@"Delete" ,nil];
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setBackgroundColor:[UIColor whiteColor]];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateSelected];
}
}
// [actionSheet setBackgroundColor:[UIColor whiteColor]];
[actionSheet showInView:self.view];