当你在外面点击它时,如何使用uiactionsheet消失?

时间:2011-05-30 04:12:05

标签: iphone objective-c uiactionsheet

当你在外面点击它时,如何让你的uiactionsheet消失?这适用于iPhone。显然,ipad默认这样做(我可能错了)。

11 个答案:

答案 0 :(得分:15)

好的,有一个解决方案。以下内容适用于UIActionSheet的子类

// For detecting taps outside of the alert view
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self];
    if (p.y < 0) { // They tapped outside
        [self dismissWithClickedButtonIndex:0 animated:YES];
    }
}

-(void) showFromTabBar:(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];
    [tap release];
}

它的要点是在动作表的超视图中添加手势识别器,并测试所有水龙头以查看它们是否在操作表之上。

答案 1 :(得分:4)

它可能对您有用 使用:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

previous so question

答案 2 :(得分:3)

我认为你正在寻找这种方法

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

修改

你可以在你的活动表对象上使用它,它可以正常工作,但你不能在该表之外注册事件,如灰色部分

可能是因为你在视图控制器上使用UITapGestureRecognizer而不是技巧。

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(nothing)];
[actionSheet addGestureRecognizer:recognizer];

答案 3 :(得分:1)

使用有效值设置UIActionSheet的cancelButtonIndex属性后,点击外部将关闭UIActionSheet。我已经在iOS 9中尝试了。但是,如果未将此cancelButtonIndex设置为错误值(例如,超出UIActionSheet中总按钮数的索引),则在外部点击时不会发生任何事情。

答案 4 :(得分:1)

无需任何敲击手势。只需使用UIAlertActionStyleCancel操作。

答案 5 :(得分:0)

你不能通过点击外面来做到这一点,因为动作表覆盖整个视图一些透明的黑色视图,在iphone中有一些表单的按钮,但在ipad中默认情况下会出现这种情况。

所以在外面触摸你不能打电话给触摸方法。所以我不这么认为你可以这样做,当苹果在行动表中提供取消按钮时,为什么不使用那个按钮而不是这个。

答案 6 :(得分:0)

这并没有完全回答这个问题,但是我在点击其中一个项目时关闭选择器(这可以防止添加额外的“完成”按钮或“外部点击”内容):

实施viewForRow选择器的委托方法,在其中创建UILabel并将其返回:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

在这些自定义行标签上,添加点击操作处理程序:

UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
[label addGestureRecognizer:tapAction];

handleClick回调中,关闭打开的工作表(包含选择器视图的工作表):

[pickerSheet dismissWithClickedButtonIndex:0 animated:TRUE];

答案 7 :(得分:0)

使用showFromRect,例如:

UIView *barButtonView = [barButtonItem valueForKey:@"view"];
CGRect buttonRect = barButtonView.frame;

[actionSheet showFromRect:buttonRect inView:self.view animated:YES];

答案 8 :(得分:0)

iOS7中的

我在dismissWithClickedButtonIndex中添加了gestureRecognizerShouldBegin个消息,它可以正常工作。

答案 9 :(得分:0)

使用 .cancel UIAlertActionStyle作为选项。

答案 10 :(得分:-1)

只需添加样式为 .cancel 的警报。其余工作将自动完成。

alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))