0

我想在警报视图中显示表格视图。此表视图包含分段控件。这些分段控件用于打开/关闭音频、图像、文本。所以会有3个带有分段控件的单元格。

这该怎么做

请帮帮我

感谢你

4

2 回答 2

7

添加 UISegmentedControls(或 UISwitches,我个人建议使用它作为简单的开/关选项)很容易使用附件视图属性放入表格视图单元格。

你的视图控制器(或者你用来控制这个东西的任何对象)必须实现 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 应用程序一样)。我不认为把它放在警报视图中是一个很好的用户体验。

但是,我写了几篇博客文章,展示了如何将各种视图放入警报视图(文本字段,这有点用,而网络视图,可以说不是)。

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

- (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];    
}

它看起来像这样:

带有 UITableView 的 UIAlertView

于 2010-10-14T07:18:35.053 回答
0

上面的答案效果很好,但在 iPad 上,这条线myView.backgroundColor = [UIColor clearColor]; 似乎并没有消除桌子周围的灰色矩形区域。我发现以下内容可以完成这项工作:tableView.backgroundView.alpha = 0.0;

于 2011-03-21T08:54:57.890 回答