将 UIPickerView 添加到 UIActionSheet(底部的按钮)

Posted

技术标签:

【中文标题】将 UIPickerView 添加到 UIActionSheet(底部的按钮)【英文标题】:Adding UIPickerView to UIActionSheet (buttons at the bottom) 【发布时间】:2013-04-20 16:17:34 【问题描述】:

我想要

    显示选择器视图(向上滑动) 在可见时停用背景 在底部(而不是顶部)显示 (UIActionSheet) 按钮

在我看来,这似乎是一个简单的解决方案,因为您可以在网络上的任何地方找到将选择器视图添加到操作表的代码,但所有解决方案都将按钮放在顶部,我需要将按钮放在操作表的底部(对齐?)

这可能吗?我想如果我看一下:Example

问候

杰文

已编辑(我的解决方案基于 coded dads 解决方案)

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:nil
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];
    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 0, 0, 0);
    UIPickerView *pickerView = [[UIPickerView alloc]initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.dataSource = self;
    pickerView.delegate = self;

    UISegmentedControl *backButton =  [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Back", nil]] ;
    [backButton addTarget:self action:@selector(someFunction:) forControlEvents:UIControlEventValueChanged];
    backButton.tintColor = [UIColor colorWithRed:0.10 green:0.20 blue:0.52 alpha:0.5];
    backButton.segmentedControlStyle = UISegmentedControlStyleBar;
    [backButton addTarget:self action:@selector(btnActionCancelClicked:) forControlEvents:UIControlEventAllEvents];
    backButton.frame = CGRectMake(20.0, 220.0, 280.0, 40.0);

    UISegmentedControl *acceptButton =  [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Accept", nil]] ;
    [acceptButton addTarget:self action:@selector(anotherFunction:) forControlEvents:UIControlEventValueChanged];
    acceptButton.tintColor = [UIColor colorWithRed:0.10 green:0.20 blue:0.52 alpha:0.5];
    acceptButton.segmentedControlStyle = UISegmentedControlStyleBar;
    acceptButton.frame = CGRectMake(20.0, 280.0, 280.0, 40.0);

    [actionSheet addSubview:pickerView];
    [actionSheet addSubview:backButton];
    [actionSheet addSubview:acceptButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];
    [actionSheet setFrame:CGRectMake(0,150,320, 400)]; 

...然后只需应用 iPhone 5/iphone 4 相关视图大小约束

编辑 2: 只是另一个提示!最初我想使用标准的 Actionsheet,但不想将pickerview 放在底部。我没有找到如何移动按钮的方法。显然它真的很简单:Add UIView as subView on UIActionSheet 很高兴知道 ;)

【问题讨论】:

你可以简单地放弃 UIActionSheet 并使用 UIPickerView 和几个 UIButtons 来做一个 UIView UIActionSheet 并不是要添加任意子视图。它的唯一目的是显示一组按钮。就是这样。使用更合适的解决方案。当Apple完全改变操作表的布局或外观时,错误地使用这些东西注定会严重崩溃。 【参考方案1】:

你有两种可能:

选项 1:大调整。

ActionSheet 以初始化期间定义的顺序显示按钮。所以在顶部放置一些虚拟按钮,取消将是唯一可见的,所有其他按钮将被选择器视图隐藏。代码(otherButtonTitles 处的警告调整)

UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Actionsheet"
                                                  delegate:self
                                         cancelButtonTitle:@"Cancel"
                                    destructiveButtonTitle:nil
                                         otherButtonTitles:@"1", @"2", @"3", @"4", nil];

UIPickerView *pickerView = [[UIPickerView alloc] init];
pickerView.delegate = self;
pickerView.dataSource = self;

[menu addSubview:pickerView];
[menu showInView:self.view];
[menu setBounds:CGRectMake(0,0,320, 500)];

CGRect pickerRect = pickerView.bounds;
pickerRect.origin.y = 35;
pickerView.frame = pickerRect;

选项2:自制

menu = [[UIActionSheet alloc] initWithTitle:@"Actionsheet"
                                                  delegate:self
                                         cancelButtonTitle:nil
                                    destructiveButtonTitle:nil
                                         otherButtonTitles:nil];

UIPickerView *pickerView = [[UIPickerView alloc] init];
pickerView.delegate = self;
pickerView.dataSource = self;
CGRect pickerRect = pickerView.bounds;
pickerRect.origin.y = 35;
pickerView.frame = pickerRect;

UIButton *startbtn = [UIButton buttonWithType:UIButtonTypeCustom];
startbtn.frame = CGRectMake(80,230, 170, 73);
[startbtn setBackgroundImage:[UIImage imageNamed:@"yourbutton.png"] forState:UIControlStateNormal];
[startbtn addTarget:self action:@selector(pressedbuttonCancel:) forControlEvents:UIControlEventTouchUpInside];

[menu addSubview:pickerView];
[menu addSubview:startbtn];
[menu showInView:self.view];
[menu setFrame:CGRectMake(0,150,320, 350)];

检查选项 2 的按钮是否应该在操作表上,除非点击不会发送到选择器方法。

【讨论】:

您好,感谢您的回答,不幸的是,在第二个示例中,pickerview 没有显示(只是一个黑色方块)。这是为什么?好吧,因为“pickerView.showsSelectionIndicator = YES;”不见了;)

以上是关于将 UIPickerView 添加到 UIActionSheet(底部的按钮)的主要内容,如果未能解决你的问题,请参考以下文章

如何将列添加到预先存在的 uipickerview

如何将可点击的图像添加到 UIPickerView 行?

使用 UIPickerView 中的数据将单元格添加到数组?

将 UIPickerView 添加到 UIActionSheet(底部的按钮)

将按钮添加到 UIPickerView 以转到下一个数字

如何将带有完成按钮的工具栏添加到 UIPickerView?