Найти родительский UIActionSheet - PullRequest
2 голосов
/ 21 мая 2011

У меня есть UIActionSheet, чтобы выбрать время для использования в моем приложении. Выбор времени работает нормально, но я не могу найти способ скрыть лист действий при нажатии кнопки «Готово».

Код, который у меня есть:

-(void) showTimespanPicker{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Preparation Time", "Preparation Time")
    delegate:self                                    cancelButtonTitle:nil//@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    actionSheet.tag = PREPTIME_PICKER;

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
    prepTimePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
    prepTimePicker.datePickerMode = UIDatePickerModeCountDownTimer;
    prepTimePicker.countDownDuration = (NSTimeInterval )[recipe.prepTime doubleValue];

    [actionSheet addSubview:prepTimePicker];
    [prepTimePicker release];

    // create toolbar with "Done" button
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(prepTimeSelected)];
    NSArray *barButtons = [NSArray arrayWithObject:barButtonItem];
    [toolbar setItems:barButtons];
    [actionSheet addSubview:toolbar];

    MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [actionSheet showInView:delegate.window];
    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}
// fires when the done button is clicked
-(void)prepTimeSelected {
    recipe.prepTime = (NSInteger)prepTimePicker.countDownDuration;
    [self updatePickerValues];
    [[prepTimePicker.superview].setHidden:YES];
}

Последняя строка в prepTimeSelected скрывает UIDatePicker, но не лист действий. Я думаю, что мне нужен какой-то рекурсивный способ поиска родителя кнопки, либо это, либо создание переменной / свойства класса для ActionSheet, но этот способ кажется неправильным.

Ответы [ 3 ]

0 голосов
/ 21 мая 2011
UIView *aView = prepTimePicker;
do {
    aView = aView.superView;
} while ((aView != nil) && [aView isMemberOfClass:[UIActionSheet class]]);
[aView dismissWithClickedButtonIndex:0 animated:YES];

Это должно помочь вам найти объект UIActionSheet.

0 голосов
/ 21 мая 2011
[[ [[[UIApplication sharedApplication] delegate] window]  
   viewWithTag: PREPTIME_PICKER] dismissWithClickedButtonIndex:0 animated:YES];

Это не сработало?

0 голосов
/ 21 мая 2011
UIActionSheet *menuProperty;    

@property(nonatomic,retain) UIActionSheet *menuArea;  

Затем вам нужно внести следующие изменения в ваш файл .m

menuArea = [[UIActionSheet alloc] initWithTitle:nil  delegate:self
                                        cancelButtonTitle:@"Done"  
                                    destructiveButtonTitle:nil
                                         otherButtonTitles:nil];  


// Add the picker  
pickerArea = [[UIPickerView alloc] initWithFrame:CGRectMake(0,185,0,0)];  

pickerArea.delegate = self;  
pickerArea.showsSelectionIndicator = YES;    // note this is default to NO  

[menuArea addSubview:pickerArea];  
[menuArea showInView:self.view];  
[menuArea setBounds:CGRectMake(0,0,320, 600)];  
...