Добавление 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];
}
Это будет выглядеть примерно так: