当你在外面点击它时,如何让你的uiactionsheet消失?这适用于iPhone。显然,ipad默认这样做(我可能错了)。
答案 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
答案 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)
我在dismissWithClickedButtonIndex
中添加了gestureRecognizerShouldBegin
个消息,它可以正常工作。
答案 9 :(得分:0)
使用 .cancel UIAlertActionStyle作为选项。
答案 10 :(得分:-1)
只需添加样式为 .cancel 的警报。其余工作将自动完成。
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))