UIActionSheet单击/点击外部时关闭

时间:2011-09-13 13:19:22

标签: iphone objective-c uiactionsheet

我是iPhone开发的新手。任何人都可以告诉我当我在它外面点击时如何解雇UIActionSheet控件?

在我的actionSheet中我只有datePicker控件,它现在弹出标签栏控件,当用户在其外部点击时我想要它,它应该忽略而不是使用actionSheet的取消按钮。 此致

6 个答案:

答案 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)

答案 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,您可以通过以下方式实现它:

  1. 检查buttonIndex(如果buttonIndex&gt; = 0,则只运行你的东西)。点击外部操作表将使buttonindex = -1。
  2. 实现didDismissWithButtonIndex
  3. 请注意,这仅在您实现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];
        }
    }