2017-01-30 11 views
0

UIActionView를 UIAlertView 위에 표시하려고합니다. 그러나 아래 코드에 따르면, UIAlertView에서 숨겨집니다. (아래 스크린 샷을 참조하십시오.) enter image description here 먼저 사용자 지정 UIAlertView를 보여주고 사용자가 단위를 누른 다음 UIActionSheet를 표시합니다. 그러나 UIAlertView에서는 숨겨져 있습니다. 아래는 내 코드 집합입니다.UIActionSheet를 UIAlertView 맨 위에 표시하는 방법

-(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 (단위 필드)에서 사용자 정의 textfield를 선택하면 UIActionSheet를 다시 엽니 다. 이 UIActionSheet는 이전 UIAlerView에서 숨겨져 있습니다 (첨부 된 이미지 참조). iPad 용 –

답변

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

및 UIActionSheet를 사용할 때 여기에 popover 코드를 작성해야합니다. 단지 FYI – cspam