2017-01-30 9 views
0

私はUIAlertViewの上にUIActionSheetを表示したいと思います。しかし、以下のコードによれば、UIAlertViewからは隠されています。 (下のスクリーンショットを参照) enter image description here 最初に、カスタマイズされたUIAlertViewを表示し、ユーザーがユニットをタップして、UIActionSheetを表示します。しかし、それはUIAlertViewから隠されています。以下は私のコードセットです。目的のcのUIAlertViewの上にUIActionSheetを表示する方法

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    if (actionSheet.tag == 2) { 
     return; 
    } 

    if (actionSheet.tag == 1 && (int)buttonIndex == 4) { 

     UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 310, 60)]; 

     UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(5,0,100,25)]; 
     label1.text = @"Dimensions:"; 
     [v addSubview:label1]; 

     UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(100,0,60,25)]; 
     textField1.borderStyle = UITextBorderStyleRoundedRect; 
     textField1.placeholder = @"Width"; 
     textField1.keyboardAppearance = UIKeyboardAppearanceAlert; 
     [textField1 setValue:[UIFont fontWithName: @"San Francisco" size:12] forKeyPath:@"_placeholderLabel.font"]; 
     textField1.delegate = self; 
     [v addSubview:textField1]; 

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(172,0,25,25)]; 
     label.text = @"X"; 
     [v addSubview:label]; 


     UITextField *textField3 = [[UITextField alloc] initWithFrame:CGRectMake(195,0,60,25)]; 
     textField3.placeholder = @"Height"; 
     textField3.borderStyle = UITextBorderStyleRoundedRect; 
     textField3.keyboardAppearance = UIKeyboardAppearanceAlert; 
     [textField3 setValue:[UIFont fontWithName: @"San Francisco" size:12] forKeyPath:@"_placeholderLabel.font"]; 
     textField3.delegate = self; 
     [v addSubview:textField3]; 


     UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(5,30,50,25)]; 
     label2.text = @"Units:"; 
     [v addSubview:label2]; 

     UITextField *textField4 = [[ReadOnlyTextField alloc] initWithFrame:CGRectMake(100,30,155,25)]; //145 
     textField4.placeholder = @"-- Select an Unit --"; 
     textField4.borderStyle = UITextBorderStyleRoundedRect; 
     textField4.keyboardAppearance = UIKeyboardAppearanceAlert; 
     [textField4 setValue:[UIFont fontWithName: @"San Francisco" size:12] forKeyPath:@"_placeholderLabel.font"]; 

     [textField4 addTarget:self action:@selector(selectUnit:) forControlEvents:UIControlEventTouchDown]; 

     textField4.delegate = self; 
     [v addSubview:textField4]; 


     av = [[UIAlertView alloc] initWithTitle:@"Dimensions" message:@"" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Download", nil]; 
     [av setValue:v forKey:@"accessoryView"]; 
     [av show]; 
    } 

-(void)selectUnit:(id)sender 
{ 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select an option" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

    actionSheet.tag = 2; 

    [actionSheet addButtonWithTitle:@"Pixels"]; 
    [actionSheet addButtonWithTitle:@"Inches"]; 
    [actionSheet addButtonWithTitle:@"Centimetres"]; 
    [actionSheet addButtonWithTitle:@"Millimetres"]; 
    [actionSheet addButtonWithTitle:@"Cancel"]; 

    [actionSheet showInView:self.view]; //[UIApplication sharedApplication].keyWindow.rootViewController.view 

} 

カスタマイズされたUIAlertViewの上にUIACtionSheetを表示するにはどうすればいいですか?

+0

コードの正確な流れを説明できますか?最初にあなたがUIActionSheetを呼び出したと思うと、UIActionsheetの応答はUIAlertViewであり、UIAlertViewアクションでは新しいUIActionSheetを表示します。 –

+0

@SiddheshMhatreまずUIActionSheetを開き、オプションを選択します。オプションを選択すると、カスタマイズされたUIAlertViewが開きます。その後、UIAlertView(ユニットフィールド)でカスタマイズしたテキストフィールドを選択すると、UIActionSheetが再び開きます。このUIActionSheetは、以前のUIAlerViewから隠されています(添付の画像を参照)。 –

答えて

0

UIAlertViewまたはActionSheetは推奨されていません。あなたは本当に代わりにUIAlertControllerを使うべきです。次に、テキストフィールド、ボタンをUIActionsとして追加することができます。各アクションには、各オブジェクトにメソッドを実装するのを容易にするcompletionHandlerがあります。例:

UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Test" message:@"Please Enter your name " preferredStyle:UIAlertControllerStyleAlert]; 
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) { 
     textField.placeholder = @"Person Name "; 
     textField.textColor = [UIColor blueColor]; 
     textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     textField.borderStyle = UITextBorderStyleRoundedRect; 
     textField.secureTextEntry = NO; 

    }]; 
    UIAlertAction* yesButton = [UIAlertAction 
           actionWithTitle:@"Yes" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) 
           { 
            //Handle the ENTER button 
            // how to Display the name in the label 

           }]; 
    UIAlertAction* noButton = [UIAlertAction 
           actionWithTitle:@"No" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) 
           { 
            //Handle no button. 
           }]; 

    // adding the object to the box 
    [alert addAction:yesButton]; 
    [alert addAction:noButton]; 

    // present the box 
    [self presentViewController:alert animated:YES completion:nil]; 
+0

iPad用で、UIActionSheetを使用している場合は、ここでもポップオーバーコードを作成する必要があります。 – cspam

関連する問題