UIPickerView с UIActionSheet IOS 8 перестает работать

Отображение UIPickerView с UIActionSheet в iOS8 не отображается

введите здесь описание изображения

введите здесь описание изображения

-(void)showPicker{

    /************************  FIXED please contact me on [email protected] if you need help to fix******//





   actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
   [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];



    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;

    switch((uint)currentDelegate){
        case 0:{
            pickerView.dataSource = propertyDelegate;
            pickerView.delegate = propertyDelegate;
            [pickerView selectRow:[propertyDelegate index] inComponent:0 animated:NO];
            break;
        }
        case 1:{
            pickerView.dataSource = regionDelegate;
            pickerView.delegate = regionDelegate;
            [pickerView selectRow:[regionDelegate index] inComponent:0 animated:NO];
            break;
        }
        case 2:{
            pickerView.dataSource = townDelegate;
            pickerView.delegate = townDelegate;
            [pickerView selectRow:[townDelegate index] inComponent:0 animated:NO];
            break;
        }
        case 3:{
            pickerView.dataSource = bedDelegate;
            pickerView.delegate = bedDelegate;
            [pickerView selectRow:[bedDelegate index] inComponent:0 animated:NO];
            break;
        }
        case 4:{
            pickerView.dataSource = bathDelegate;
            pickerView.delegate = bathDelegate;
            [pickerView selectRow:[bathDelegate index] inComponent:0 animated:NO];
            break;
        }
        case 5:{
            pickerView.dataSource = priceDelegate;
            pickerView.delegate = priceDelegate;
            [pickerView selectRow:[priceDelegate index1] inComponent:0 animated:NO];
            [pickerView selectRow:[priceDelegate index2] inComponent:1 animated:NO];
            break;
        }
        case 6:{
            pickerView.dataSource = currencyDelegate;
            pickerView.delegate = currencyDelegate;
            [pickerView selectRow:[currencyDelegate index] inComponent:0 animated:NO];
            break;
        }

    }







    [actionSheet addSubview:pickerView];

    UISegmentedControl *previousButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"Previous", nil)]];
    previousButton.momentary = YES; 
    previousButton.frame = CGRectMake(5.0f, 7.0f, 70.0f, 30.0f);
    previousButton.segmentedControlStyle = UISegmentedControlStyleBar;
    previousButton.tintColor = [UIColor blackColor];

    UISegmentedControl *nextButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"Next", nil)]];
    nextButton.momentary = YES; 
    nextButton.frame = CGRectMake(80.0f, 7.0f, 70.0f, 30.0f);
    nextButton.segmentedControlStyle = UISegmentedControlStyleBar;
    nextButton.tintColor = [UIColor blackColor];


    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"Done", nil)]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(240, 7.0f, 70.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor colorWithRed:0.35f green:0.55f blue:1.5f alpha:1.0f];

    [closeButton addTarget:self action:@selector(hidePicker) forControlEvents:UIControlEventValueChanged];

    [previousButton addTarget:self action:@selector(previousPicker) forControlEvents:UIControlEventValueChanged];

    [nextButton addTarget:self action:@selector(nextPicker) forControlEvents:UIControlEventValueChanged];

    if(currentDelegate > 0)[actionSheet addSubview:previousButton];
    if(currentDelegate < 6)[actionSheet addSubview:nextButton];

    [actionSheet addSubview:closeButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}

-(void) nextPicker{

    [self hidePicker];

    currentDelegate++;

    [self showPicker];
}

-(void) previousPicker{

    [self hidePicker];
    currentDelegate--;

    [self showPicker];
}

-(void)hidePicker{


    switch ((uint)currentDelegate) {
        case 0:{
            [tf_type setText: [propertyDelegate.values objectAtIndex: [propertyDelegate index]]];
            _appDelegate.int_typeV = [propertyDelegate index];
            break;
        }
        case 1:{
            [tf_region setText: [regionDelegate.values objectAtIndex: [regionDelegate index]]];
            _appDelegate.int_regionV = [regionDelegate index];

            //Reset Town dropdown when a region is picked
            _appDelegate.int_townV = 0;
            townDelegate = [[TownDelegate alloc] init];
            [self.tf_town setText: [townDelegate.values objectAtIndex: [_appDelegate int_townV]]];

            break;
        }
        case 2:{
            [tf_town setText: [townDelegate.values objectAtIndex: [townDelegate index]]];
            _appDelegate.int_townV = [townDelegate index];
            break;
        }
        case 3:{
            [tf_numBed setText: [bedDelegate.values objectAtIndex: [bedDelegate index]]];
            _appDelegate.int_numBedV = [bedDelegate index];
            break;
        }
        case 4:{
            [tf_numBath setText: [bathDelegate.values objectAtIndex: [bathDelegate index]]];
            _appDelegate.int_numBathV = [bathDelegate index];
            break;
        }
        case 5:{
            NSString * priceString = [[NSString alloc] initWithFormat:@"%@ - %@", 
                                      [priceDelegate.values objectAtIndex: [priceDelegate index1]], 
                                      [priceDelegate.values2 objectAtIndex: [priceDelegate index2]]];
            [tf_price setText:priceString];

            _appDelegate.int_minPriceV = [priceDelegate index1];
            _appDelegate.int_maxPriceV = [priceDelegate index2];
            break;
        }
        case 6:{
            [tf_currency setText: [currencyDelegate.values objectAtIndex: [currencyDelegate index]]];
            _appDelegate.int_currencyV = [currencyDelegate index];
            break;
        }
    }

    [popoverController dismissPopoverAnimated:YES];
    popoverController = nil;

    [self dismissActionSheet];
}

Мой вид выбора

#import "PropertyTypeDelegate.h"

@implementation PropertyTypeDelegate
@synthesize values;


-(id)init{

    self = [super init];
    [self loadData];

    return self;
}

-(int)index{ return index;}
-(void) loadData{



    NSArray* array = [[NSArray alloc] initWithObjects: 
                      NSLocalizedString(@"No Preference", nil),
                      NSLocalizedString(@"Villa", nil),
                      NSLocalizedString(@"Town House", nil),
                      NSLocalizedString(@"Apartment", nil),
                      NSLocalizedString(@"Retail", nil),
                      NSLocalizedString(@"Labour Camp", nil),
                      NSLocalizedString(@"Office", nil),
                       NSLocalizedString(@"Warehouse", nil),
                      NSLocalizedString(@"Land Residential", nil),
                      NSLocalizedString(@"Hotel apartment", nil),
                      NSLocalizedString(@"Residential Building", nil),

                      nil];

    self.values = array;

    index = 0;
}





    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
     }

    -  (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [values count];
}




    -(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent: (NSInteger)component{ return [values objectAtIndex:row];
}

    -(void)pickerView:(UIPickerView *) thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    index  = (int) (NSInteger)row;
}



    @end 

person Nuno Sarmento    schedule 19.09.2014    source источник
comment
Пожалуйста, обратитесь к этой ссылке - stackoverflow.com/questions/24366437/   -  person VijayKumar    schedule 19.09.2014
comment
Привет, Виджей Кумар, зачем мне это нужно? это новый пост с другим кодом   -  person Nuno Sarmento    schedule 19.09.2014
comment
Привет, Виджей Кумар, не могли бы вы помочь мне с этим.   -  person Nuno Sarmento    schedule 20.09.2014


Ответы (1)


Приведенная выше ссылка на самом деле относится к Apple Doc, где удалено добавление подпредставления в UIActionSheet. В своем коде вы делаете то же самое, добавляя UIPickerView в UIActionSheet. Таким образом, в iOS8 и более поздних версиях, даже если представление добавлено в UIActionSheet, возвращаемое представление фактически равно нулю при отображении.

Для этого вы можете использовать ActionSheetPicker-3.0. На самом деле, это уже не UIActionSheet. Но выглядит точно так же, поэтому работает на iOS8. Дайте мне знать, если это ответит на ваш вопрос!

person VijayKumar    schedule 20.09.2014
comment
Большое спасибо за ваш быстрый ответ, я скачал ActionSheetPicker, это очень умное решение, но я все еще немного запутался и потерялся, как мне определить свои взгляды на это? Спасибо - person Nuno Sarmento; 20.09.2014
comment
Пожалуйста, ВиджайКунар, не могли бы вы рассказать мне, как я могу настроить этот pickerView.dataSource = propertyDelegate; pickerView.delegate = делегат свойства; [pickerView selectRow: [propertyDelegate index] inComponent: 0 анимированный: НЕТ]; на этом ActionSheetPicker - person Nuno Sarmento; 21.09.2014
comment
Мне удалось добавить ActionSheetPicker, работающий над моим проектом, но я не могу понять, как добавить источник данных в этот пример, не могли бы вы мне помочь? - person Nuno Sarmento; 21.09.2014
comment
На самом деле вам не нужно ничего делать. Используя ActionSheetStringPicker, гораздо проще выполнить блок Done и блок Cancel. Для указания источника данных вам необходимо передать объекты dataArray NSString указанному выше методу. - person VijayKumar; 22.09.2014
comment
Как мне это сделать, пожалуйста, Виджей Кумар, помоги мне с этим. - person Nuno Sarmento; 22.09.2014
comment
[ActionSheetStringPicker showPickerWithTitle:@Select Количество столбцов rows:dataArray initialSelection:0 doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) {} cancelBlock:^(ActionSheetStringPicker *picker){}origin:cell.detailTextLabel]; dataArray состоит из строки, которая будет отображаться в средстве выбора - person VijayKumar; 22.09.2014
comment
Еще раз спасибо за быстрый ответ, я опубликовал представление средства выбора, в котором есть мои данные, мне нужно извлечь данные из моего представления средства выбора в мой ActionSheetPicker, мне очень жаль, Виджей Кумар, что снова прошу вас о помощи, но, пожалуйста, помогите мне с этим , я джуниор программист и все это сводит меня с ума. Спасибо - person Nuno Sarmento; 22.09.2014
comment
Не могли бы вы взглянуть на пример проекта, представленный в github для этой библиотеки? Дайте мне знать, если вам все еще нужна помощь - person VijayKumar; 24.09.2014
comment
Спасибо за ответ, я просто хочу знать, как передать массив NSObjet (мой сборщик клиентов) моему ActionSheetPicker в другом контроллере представления, это то, что я изо всех сил пытаюсь сделать - person Nuno Sarmento; 24.09.2014
comment
Привет, мне удалось внедрить ActionSheetCustomPickerDelegate в мой проект, и он работает, я просто следую примеру, и теперь я могу анализировать делегаты моих сборщиков на моем контроллере представления, единственная проблема, с которой я сталкиваюсь сейчас, это когда щелкнуть на средство выбора, чтобы выбрать строку, выделение ничего не размещает на моем ярлыке, помогите мне с этим. спасибо - person Nuno Sarmento; 26.09.2014
comment
Вы можете добавить свою метку в целевое поле, а также заполнить детали в готовом блоке. - person VijayKumar; 27.09.2014
comment
Спасибо, я также считаю, что мы можем добавить это, но моя проблема заключается в том, как это сделать. - person Nuno Sarmento; 28.09.2014
comment
[ActionSheetStringPicker showPickerWithTitle:@MyTitle rows:dataArray initialSelection:0 doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) { yourTextField.text = dataArray objectAtIndex[selectedIndex]; } } cancelBlock:^(ActionSheetStringPicker *picker) { // Ваш код для отмены } origin:yourTextField]; - person VijayKumar; 29.09.2014
comment
Это мой IBAction: - (IBAction)SelectPropertyType:(UIControl *)sender { PropertyTypeDelegate *delg = [[PropertyTypeDelegate alloc] init]; NSNumber *yass1 = @1; NSArray *initialSelections = @[yass1];} . Где я могу назначить text.field ? - person Nuno Sarmento; 29.09.2014
comment
цель — это та, из которой вы хотите вызвать свой лист действий. В моем случае это было текстовое поле, в вашем случае вы должны знать при касании или щелчке, что должно отображаться в ActionSheet. - person VijayKumar; 29.09.2014
comment
я совсем запуталась со всем этим - person Nuno Sarmento; 29.09.2014
comment
NSArray *anotherArray = [[NSArray alloc] initWithObjects:@0, @2, @3, @8, nil]; [ActionSheetStringPicker showPickerWithTitle:actionSheet.title rows:anotherArray initialSelection:0 doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:0]; if(iUnivHall == 1){ if(txtField!= nil){ txtField.text = [dataArray objectAtIndex: selectedIndex]; } } } cancelBlock:^(ActionSheetStringPicker *picker) { // Ничего не нужно делать } origin:txtField]; - person VijayKumar; 30.09.2014
comment
Я сдаюсь :(, я бы заплатил, чтобы увидеть, как это будет сделано, уже неделю ломаю голову из-за этого, знаете ли вы, что кто-нибудь может сделать эту работу, я заплачу за это - person Nuno Sarmento; 30.09.2014
comment
В чем проблема? Здесь совершенно ясно, текстовое поле - это мое поле uitext, из которого я хочу показать лист действий, и при нажатии кнопки «Готово» в листе действий я получаю значение из того же массива, который я дал в массиве для заполнения обратно в текстовое поле. Это делается путем получения значения с использованием переданного выбранного индекса в методе done. - person VijayKumar; 30.09.2014
comment
Это работает, когда он используется в том же представлении, вызывающем массив из viewDidLoad. Мой сценарий отличается. Я вызываю свой массив из NSObject Delegate. Вот как я вызываю свой массив из моего NSObject PropertyDelegate . - (IBAction)SelectPropertyType:(UIControl *)sender { PropertyTypeDelegate *delg = [[PropertyTypeDelegate alloc] init]; NSNumber *yass1 = @1; NSArray *initialSelections = @[yass1]; [ActionSheetCustomPicker showPickerWithTitle:@Property Type delegate:delg showCancelButton:YES origin:sender initialSelections:initialSelections ]; }- - person Nuno Sarmento; 01.10.2014
comment
Я могу заполнить сборщик, чего я не могу сделать, так это добавить значение в текстовое поле. - person Nuno Sarmento; 01.10.2014
comment
Не могли бы вы вместо этого использовать ActionSheetStringPicker? - person VijayKumar; 01.10.2014
comment
это то, что я пытаюсь использовать - person Nuno Sarmento; 01.10.2014
comment
Пожалуйста, я очень ценю некоторую помощь здесь - person Nuno Sarmento; 06.10.2014
comment
Я использовал ActionSheetStringPicker, и я также разместил вам свой пример, я не уверен, какая дополнительная помощь вам может понадобиться в этом. Если вы не против отправить мне свой файл кода по электронной почте, я могу посмотреть его позже [email protected] - person VijayKumar; 06.10.2014
comment
Хорошо, еще раз большое спасибо, я отправлю вам весь проект без проекта ActionSheetPicker в github (github.com/TimCinel/ ActionSheetPicker). Пожалуйста, дайте мне знать, сколько это стоит, я хочу заплатить вам за работу. Электронное письмо будет иметь тему Project ActionSheet. с уважением, - person Nuno Sarmento; 06.10.2014
comment
@VijayKumar Моя новая версия ActionSheetPicker github.com/skywinder/ActionSheetPicker-3.0 работает с iOS8! Проверьте мой ответ ниже stackoverflow.com/a/26343431/1698467 - person skywinder; 13.10.2014
comment
@skywinder - Сделаю это! Спасибо - person VijayKumar; 14.10.2014