iPad动态表未显示

时间:2014-01-18 09:51:44

标签: ios objective-c xcode ipad uiactionsheet

我正在尝试在iPad中显示操作表,其中包含2个按钮和日期选择器视图。

我在iphone中正确显示了操作表,但当我尝试在iPad中显示操作表时,它只显示一条粗黑线。

目前看起来像:

enter image description here

显示操作表的代码是

    UIButton *btnClicked=(UIButton *)sender;
    menu = [[UIActionSheet alloc] initWithTitle:nil
                                       delegate:self
                              cancelButtonTitle:nil
                         destructiveButtonTitle:nil
                              otherButtonTitles:nil];
   /* menu=[[UIActionSheet alloc] initWithTitle:@"This will remove this recipe from all synced devices as well. Are you sure?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Confirm Delete Recipe" otherButtonTitles:nil];*/
    [menu setTag:121];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,5,300,20)];
    [titleLabel setFont:[UIFont fontWithName:@"Trebuchet MS" size:18.0f]];
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.backgroundColor = [UIColor clearColor];
    titleLabel.textColor = [UIColor whiteColor];
    [titleLabel setNumberOfLines:1];

    [menu addSubview: titleLabel];

    UIButton *cancelButton = [UIButton buttonWithType: UIButtonTypeCustom];
    cancelButton.frame = CGRectMake(30, 30, 124, 43);
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel_button.png"] forState: UIControlStateNormal];
    [cancelButton addTarget:self action:@selector(cancelButtonClicked:)    forControlEvents:UIControlEventTouchUpInside];
    cancelButton.adjustsImageWhenHighlighted = YES;
    cancelButton.tag=33;
    [menu addSubview: cancelButton];

    UIButton *okButton = [UIButton buttonWithType: UIButtonTypeCustom];
    okButton.frame = CGRectMake(170, 30, 124, 43);
    [okButton setBackgroundImage:[UIImage imageNamed:@"continue_button.png"] forState: UIControlStateNormal];
    [okButton addTarget:self action:@selector(okButtonClicked:)    forControlEvents:UIControlEventTouchUpInside];
    okButton.adjustsImageWhenHighlighted = YES;

    [menu addSubview: okButton];

    datePickerView = [[UIDatePicker alloc] init];
    CGRect pickerRect = datePickerView.bounds;
    pickerRect.origin.y = 75;
    datePickerView.frame = pickerRect;

    //---Picker view for from date selection
    if (btnClicked.tag==51)
    {
        [titleLabel setText:SELECT_FROM_DATE];
        NSDate *now = [Global todayDate];
        int daysToAdd = 1;
        NSDate *newDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
        // NSLog(@"%@",strDtFromDate);
        datePickerView.minimumDate = newDate;
        if (holidayType==2)
        {
            NSDate *holidayFromDate=[dateFormat dateFromString:objectSelectedGroup.fromDate];
           // newDate=[holidayFromDate dateByAddingTimeInterval:60*60*24*daysToAdd];
            if ([[Global todayDate] compare:holidayFromDate] == NSOrderedAscending)
            {
                datePickerView.minimumDate = holidayFromDate;
            }
            else if([[Global todayDate] compare:holidayFromDate] == NSOrderedDescending)
            {
                datePickerView.minimumDate = newDate;
            }
            NSDate *holidayToDate=[dateFormat dateFromString:objectSelectedGroup.toDate];
            NSLog(@"%@",objectSelectedGroup.fromDate);
            NSLog(@"%@",objectSelectedGroup.toDate);

            datePickerView.maximumDate = holidayToDate;

        }

        okButton.tag=34;
    }
    else if(btnClicked.tag==52)
    {
        [titleLabel setText:SELECT_TO_DATE];
        datePickerView.minimumDate=stringDate;
        NSDate *holidayToDate=[dateFormat dateFromString:objectSelectedGroup.toDate];
        datePickerView.maximumDate=holidayToDate;
        okButton.tag=35;
    }
    datePickerView.datePickerMode = UIDatePickerModeDate;
    stringDate=[datePickerView date];
    [datePickerView addTarget:self action:@selector(selectedDateChanged:) forControlEvents:UIControlEventValueChanged];
    [menu addSubview:datePickerView];
    //menu.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
    [menu showInView:self.view];
    [menu setFrame:CGRectMake(0,self.view.frame.size.height - 290,320,290)];

同样的代码适用于iphone。 怎么解决这个问题?

3 个答案:

答案 0 :(得分:0)

UIActionaSheet不适合IPad,他们大部分时间都在帧周围表现不可预测 我建议使用带有自定义UIViewController的UIPopoverController来实现这种用户体验。

答案 1 :(得分:0)

您可以尝试使用以下行替换最后两行

[menu setFrame:CGRectMake(0,self.view.frame.size.height - 290,320,290)];
[menu showInView:[[[UIApplication sharedApplication] delegate] window]];

答案 2 :(得分:0)

使用PopOver控制器在ipad上显示操作表。要在Popover控制器上使用操作表,请参阅以下链接

UIDatePicker in UIActionSheet on iPad

UIActionSheet on iPad frame too small