我可以在每个单元格中使用带有分段控件的表格视图显示警报视图

时间:2010-10-13 21:37:56

标签: iphone uitableview uialertview uisegmentedcontrol

我想在警报视图中显示表格视图。此表视图包含分段控件。 这些分段控件用于打开/关闭音频,图像,文本。因此将有3个细胞具有分段对照。

如何做到这一点

请帮帮我

谢谢你

2 个答案:

答案 0 :(得分:7)

添加UISegmentedControls(或UISwitches,我个人推荐用于简单的开/关选项)很容易使用accessoryView属性放入表格视图单元格。

您的视图控制器(或您用来控制此事物的任何对象)必须实现UITableViewDataSource协议。

@interface MyViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {}
@end

在tableView中添加控件:cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString* const SwitchCellID = @"SwitchCell";
    UITableViewCell* aCell = [tableView dequeueReusableCellWithIdentifier:SwitchCellID];
    if( aCell == nil ) {
        aCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SwitchCellID] autorelease];
        aCell.textLabel.text = [NSString stringWithFormat:@"Option %d", [indexPath row] + 1];
        aCell.selectionStyle = UITableViewCellSelectionStyleNone;
        UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
        aCell.accessoryView = switchView;
        [switchView setOn:YES animated:NO];
        [switchView addTarget:self action:@selector(soundSwitched:) forControlEvents:UIControlEventValueChanged];
        [switchView release];
    }

    return aCell;
}

或者,如果您设置了分段控件,请将上面的UISwitch替换为:

    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"On", @"Off", nil]];
    segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
    segmentedControl.frame = CGRectMake(75, 5, 130, 30);
    segmentedControl.selectedSegmentIndex = 0;
    [segmentedControl addTarget:self action:@selector(controlSwitched:) forControlEvents:UIControlEventValueChanged];
    aCell.accessoryView = segmentedControl;
    [segmentedControl release];     

我个人会把这些选项放在一个常规视图中(可能从一个选项按钮可以访问,它可以像许多iPhone应用程序那样进行翻转过渡)。我不认为把它放在警报视图中是一种非常好的用户体验。

但是,我写了一些博客文章,展示如何将各种观点放入警报视图(text field,这有点有用,而web view,可以说是没有。)

所以,如果你真的把它放在一个警报视图中,你可以完全这样做,就像这样:

- (void) doAlertWithListView {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Preferences" 
                                                    message:@"\n\n\n\n\n\n\n"
                                                   delegate:self 
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"OK", nil];

    UITableView *myView = [[[UITableView alloc] initWithFrame:CGRectMake(10, 40, 264, 150) 
                                                        style:UITableViewStyleGrouped] autorelease];
    myView.delegate = self;
    myView.dataSource = self;
    myView.backgroundColor = [UIColor clearColor];
    [alert addSubview:myView];

    [alert show];
    [alert release];    
}

看起来像这样:

UIAlertView with a UITableView

答案 1 :(得分:0)

上面的答案很有效,但在iPad上,myView.backgroundColor = [UIColor clearColor]; 行似乎没有删除表格周围的灰色矩形区域。我发现以下工作可以完成:tableView.backgroundView.alpha = 0.0;