2013-04-20 4 views
2

Я хочуДобавление UIPickerView к UIActionSheet (кнопки внизу)

  1. показать вид сборщика (скольжение вверх)
  2. деактивировать фона в то время как это видно
  3. кнопки
  4. шоу (UIActionSheet) в нижней части (не вверху)

Мне кажется, что это простое решение, так как вы можете найти код для добавления вида выбора в лист действий повсюду в Интернете, но все решения позиционируют кнопки вверху и Мне нужно поместить кнопки в нижней части листа действий (выравнивание?).

Возможно ли это? Я предполагаю, что, если я смотрю на: Example

С уважением

Jeven

редактируется (мое решение, основанный на кодированном решении папа)

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 зависимых ограничений вида просмотра

EDITED 2: Еще один намек! Первоначально я хотел использовать стандартный файл Actionsheet, но не хотел размещать pickerview внизу. Я не нашел способ перемещения кнопок. Очевидно, что S действительно просто: Add UIView as subView on UIActionSheet Хорошо знать;)

+0

Вы можете просто вырезать UIActionSheet и сделать UIView с UIPickerView и пару UIButtons –

+0

'UIActionSheet' не предназначено для добавления в него произвольных подзаголовков. Единственная цель - показать набор кнопок. Вот и все. Используйте более подходящее решение. Использование таких вещей некорректно обречено на прорыв, когда Apple полностью изменит макет или внешний вид листа действий. – rmaddy

+0

Сломанный в iOS8! – Chris

ответ

4

У вас есть 2 possibilites:

опция1: большой Tweak.

ActionSheet показывает кнопки с порядком, определенным во время инициализации. Поэтому поместите некоторые фиктивные кнопки вверху, а Cancel будет единственным видимым, все остальные кнопки будут скрыты при помощи pickerview. Код (предупреждение-твик на 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; 

Option2: самопроизведённые

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)]; 

Убедитесь, что для option2 кнопку должна быть на actionsheet, если щелчки не будет не будет отправлен в метод выбора.

+0

Привет, спасибо за ваш ответ, к сожалению, во втором примере pickerview не отображается (просто черный квадрат). Почему это? Ах нормально, потому что «pickerView.showsSelectionIndicator = YES;» пропал, отсутствует ;) – jeven

Смежные вопросы