我是iPhone开发的新手。任何人都可以告诉我当我在它外面点击时如何解雇UIActionSheet控件?
在我的actionSheet中我只有datePicker控件,它现在弹出标签栏控件,当用户在其外部点击时我想要它,它应该忽略而不是使用actionSheet的取消按钮。 此致
答案 0 :(得分:13)
更简单的解决方案是添加“取消”按钮。这将自动启用tap-background-to-dismiss :( Swift)
alertController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
答案 1 :(得分:6)
试试这个魔法:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
tap.cancelsTouchesInView = NO;
[actionSheet.window addGestureRecognizer:tap];
[tap release];
这个方法:
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
CGPoint p = [gestureRecognizer locationInView:self.actionSheet];
if (p.y < 0) {
[self actionPickerDone:nil];
}
}
答案 2 :(得分:1)
嗨参考下面的链接: How to make a uiactionsheet dismiss when you tap outside eg above it?
http://splinter.com.au/how-to-allow-closing-a-uiactionsheet-by-tappi
答案 3 :(得分:0)
我建议您创建一个透明按钮并使其与视图大小相同,然后将其发回。创建一个方法来关闭操作表并使用您的大按钮将其连接起来。我从来没有尝试过,但我觉得值得尝试,因为如果可以的话,你可以将它设置为视图上的通用方法,当用户点击文本字段外(根据HIG)以及UIActionSheet时关闭键盘。
但是我不知道以与popover相同的方式解散UIActionSheet是否合适。没有什么,没有动作表需要一些输入吗?否则为什么苹果会为您提供取消按钮?
答案 4 :(得分:0)
添加带有按钮的工具栏以sismiss datePicker和actionSheet
toolbarPicker = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolbarPicker.barStyle=UIBarStyleBlackOpaque;
[toolbarPicker sizeToFit];
NSMutableArray *itemsBar = [[NSMutableArray alloc] init];
//calls DoneClicked
UIBarButtonItem *bbitem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DoneClicked)];
[itemsBar addObject:bbitem];
[toolbarPicker setItems:itemsBar animated:YES];
[menu addSubview:toolbarPicker];
并为完成按钮添加这些操作
-(BOOL)closeDatePicker:(id)sender{
[menu dismissWithClickedButtonIndex:0 animated:YES];
[txtDate resignFirstResponder];
return YES;
}
//单击完成按钮时的操作 - (IBAction为)DoneClicked { [self closeDatePicker:self]; menu.frame = CGRectMake(0,44,320,416);
}
答案 5 :(得分:-2)
根据IOS 6,您可以通过以下方式实现它:
请注意,这仅在您实现UIActionSheetDelegate后才有效。
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
NSLog(@"action sheet was dismissed");
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
//if user click outside the action sheet, button index will be -1
if(buttonIndex>0)
{
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
}
}