Могу ли я отобразить представление оповещения с табличным представлением с сегментированными элементами управления в каждой ячейке - PullRequest
0 голосов
/ 14 октября 2010

Я хочу отобразить табличное представление в виде предупреждения.Это табличное представление содержит сегментированный элемент управления.Эти сегментированные элементы управления предназначены для включения / выключения аудио, изображения, текста.поэтому будет 3 ячейки с сегментированными контролями.

как это сделать

пожалуйста, помогите мне

Спасибо тебе

Ответы [ 2 ]

7 голосов
/ 14 октября 2010

Добавление 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). Я не думаю, что показывать это в виде предупреждения - очень хороший пользовательский опыт.

Тем не менее, я написал несколько постов в блоге, показывающих, как разместить различные представления в представлениях предупреждений ( текстовое поле , что довольно полезно, и веб-представление , что, возможно, не ).

Итак, если вы действительно настроены на то, чтобы поместить это в представление предупреждений, вы можете полностью сделать это, например:

- (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

0 голосов
/ 21 марта 2011

Ответ выше прекрасно работает, но на iPad линия myView.backgroundColor = [UIColor clearColor]; , похоже, не удаляет серую прямоугольную область вокруг стола.Я считаю, что следующее делает работу: tableView.backgroundView.alpha = 0.0;

...